Уничтожать activities после их завершения что значит
Do not keep activities
Не сохранять операции
«Не сохранять операции» — именно таким странным образом переведена фраза «Do not keep activities» в настройках Android. А описание «Удалять все операции сразу после их завершения пользователем» не добавляет ясности. Включается она в меню «Параметры разработчика» (Developer Options), находится в самом низу.
Работает эта настройка очень просто, когда она включена, все неактивные активити умирают. Т.е. после перехода из активити A в активити B, активити A уничтожается. Таким образом можно проверить насколько вписывается ваше приложение в activity lifecycle.
Почти не возникло проблем с Вконтакте, с их SDK можно написать все правильно, но все таки есть у них небольшая проблема. А именно, после авторизации через приложение, результат возвращается в onActivityResult. По документации, нужно вызвать
однако, в случае уничтожения активити нашего приложение, вылетит NPE, поэтому сначала нужно вызвать
Не совсем очевидно, да и незадокументировано. Завел issue, на всякий.
Были проблемы с Facebook, потому как, по глупости своей, я решил использовать android-simple-facebook, а ее автор, как я понял, не особо парился по поводу android lifecycle. Пришлось полностью от него отказаться и переделывать все на официальный SDK Facebook и все проблемы ушли. Хотя, наверное, можно было и так все поправить одной строчкой, но пути назад уже не было.
И совсем не было проблем с Twitter, потому что все работает просто, как топор. У них просто нет своего SDK и авторизации через приложение. Приходится делать все по старинке, через WebView. Вообще у них самая ужасная авторизация из всех.
Ну да это так, лирическое отступление.
Есть проблемы с PayPal SDK, оно просто валится везде где только можно. Благо кто-то уже завел issue до меня и наверняка они в скором будущем это поправят.
Другие примеры
У меня не много приложений на телефоне, да и смотреть их все мне, если честно, лень, но я не мог пройти мимо недавно вышедшего приложения хабра. Начнем, конечно же, с него. Ну и добавлю ошибку Payoneer, которую нашел случайно:)
Хабрахабр
Я потыкался по разным экранам и уже было расстроился, неужели все написано правильно и один лишь я делаю столько ошибок. Но нет, я таки добрался до страницы About:
Payoneer
Много времени не понадобилось. Экран логина, ушел в keepass за паролем, вернулся — гипс крэш:
Ещё есть некоторые приложения без крэшэй, но с неправильным поведением, например, не сохраняется открытый фрагмент, а вместо него, после пересоздания, снова показывается главный экран приложения.
Используйте настройку «Do not keep activities», надеюсь для кого-то эта информация окажется новой и поможет избежать ошибок поведения и крэшэй.
Думаю тоже смог бы избежать кучи репортов в Google Play, если бы сразу знал об этой настройке.
Видео: Как пользоваться режимом разработчика в Android
Не раз нам приходили комментарии с просьбой рассказать поподробнее о режиме разработчика в Android. Многие знают, что это такое, но раз вопрос есть, то на него надо ответить.
Активация режима разработчика
Сначала надо активировать режим разработчика. Для этого надо перейти в настройки, найти вкладку “О телефоне”, а в ней поле “Номер сборки” и несколько раз часто тапнуть по нему. После этого в настройках самого смартфона появится новый пункт, который будет называться “Для разработчиков”.
Перед тем как начинать что-то делать, имейте в виду, что все действия производятся на свой страх и риск. Скорее всего, все будет нормально, но есть вероятность, что что-то может пойти не так и нормальное функционирование телефона будет нарушено.
Отчет об ошибке
Можно сформировать отчет об ошибке и отправить его туда, куда нужно. Но в некоторых случаях этот пункт недоступен или отсутствует вовсе. После нажатия на этот пункт начнет создаваться отчет, который создается несколько минут, а за прогрессом можно наблюдать в центре уведомлений. Когда отчет будет сформирован, его можно будет отправить, нажав на него, или отменить отправку, смахнув его в сторону, или сбросив все уведомления.
Пароль для резервного копирования
Пароль, который вводится для того, чтобы защитить ваши резервные копии от несанкционированного доступа, задается самим пользователем и может быть любым. Для того чтобы его задать, нужно открыть этот пункт настроек и ввести его. Если делаете это первый раз, то достаточно заполнить вторую и третью строчку. Если меняете, то надо вводить и установленный ранее пароль. Также можно и удалить пароль. Для этого надо ввести пароль, который был до этого, но не вводить новый.
Не выключать экран
Этот пункт может понадобиться когда вы хотите, чтобы при подключении питания экран оставался постоянно включенным. В обычной жизни это может пригодиться для того, чтобы пользоваться телефоном как часами или навигатором. Но злоупотреблять этим режимом не стоит, так как ресурс экрана не вечен.
Включить режим трансляции операций
Этот режим позволяет сохранять пакеты HCI Bluetooth в отдельном файле, который можно будет найти в специальной папке в памяти телефона. Нужно это в основном для разработчиков и специалистов по безопасности.
Заводская разблокировка
Пункт дает возможность разблокировать загрузчик. Не разблокирует, а только позволяет это сделать. Но если вы в этом не разбираетесь, то тоже лучше не заниматься этим и пройти мимо этого пункта. Тем более, если разблокировать его, то функции защиты не будут работать на устройстве.
Работающие приложения
Этот пункт наоборот может быть полезен простым пользователям, так как тут можно посмотреть сколько памяти “съедает” каждое приложение и остановить его. Если есть какие-то проблемы, то отсюда же можно отправить отчет об ошибке и просто поподробнее изучить сами приложения.
Отладка по USB
Отладка по USB нужна для того, чтобы можно было устанавливать соединение с компьютером используя Android Debug Bridge. Как правило это требуется для получения root-прав и модификации прошивок.
Запретить доступ для USB-отладки
Для отладки по USB требуется авторизовать компьютер для этой работы. Если вы не хотите, чтобы авторизованные ранее компьютеры имели доступ к отладке по USB и хотите, чтобы для них требовалась повторная авторизация, то для этого надо просто запретить доступ для USB-отладки.
Отчет об ошибке
Если активировать этот пункт, то в меню будет добавлена кнопка, которая позволяет создавать и отправлять отчеты об ошибках. По-умолчанию такая кнопка не активна, но после активации ее можно найти, если удерживать кнопку Power как для выключения. Раньше ее там не было, а после активации этого пункта она появляется.
Выбор приложения для фиктивных местоположений
В Android можно на программном уровне изменить свое местоположение не сходя с места. В некоторых играх, или приложениях это может пригодится. Этим можно будет разыгрывать друзей, или обманывать кого-то по поводу своего местоположения. В любом случае, все это можно сделать. Для этого надо скачать какое-нибудь приложения по запросу “Fake GPS” а настроить в нем новое положение. После этого в пункте “Выбрать приложение для фиктивных местоположений” выбрать его.
Сертификация беспроводных мониторов
Тут все понятно из названия. Можно включить отображение параметров сертификации беспроводных мониторов, если вам это нужно
Подробный журнал Wi-fi
Если есть желание подробно отслеживать работу Wi-Fi соединений, то вам сюда. Активировав этот режим, можно включить более подробные отображения в журнале.
Переключаться на мобильную сеть
Активация этого пункта позволит переключаться на мобильную сеть для передачи данных когда сигнал Wi-Fi становится слишком слабым. Но в этом случае надо не забывать про объем включенного трафика или его стоимость, если у вас не безлимит. Странно, что этот пункт спрятали сюда. Например, в iOS это называется ассистент Wi-Fi и находится в обычных настройках.
Не отключать передачу данных
Для быстрого переключения между сетями можно активировать значение, которое позволит не прекращать передачу данных через мобильную сеть даже при активном Wi-Fi подключении. В этом режиме будет проще и быстрее переходит от одной сети к другой.
Конфигурация USB
В этом пункте можно настроить то, что мы настраиваем в шторке уведомлений, когда телефон подключен к компьютеру. А именно режим работы USB. Но в данном случае можно выбрать не просто значение, а значение по умолчанию.
Отключить абсолютный уровень громкости
Этот пункт позволяет отключить абсолютный уровень громкости Bluetooth при возникновении проблем на удаленном устройстве. Под этим подразумевается, например, слишком громкий звук или невозможность его регулировки.
Визуальный отклик
Полезная вещь для любителей скринкаста. Она позволяет показать то место на экране, которого вы коснулись. На каждый день вряд ли пригодится, а для съемки скринкаста, обучающего видео или чего-то подобного может подойти.
Отображение касания
Для простого пользователя это больше просто развлечение, чем полезный инструмент, но тем не менее он позволяет отобразить зафиксированные точки касания экрана. Точки выстроятся в линию, если вы будете двигать пальцем по экрану. Также это может быть полезным, если вы захотите убедиться, что не сбилась калибровка экрана.
Показывать обновление поверхности
Если активировать данный пункт, то экран будет динамично подсвечиваться после обновления его содержимого. Для простого пользователя это может быть полезно например в том случае, когда телефон лежит с включенным экраном и в этот момент приходит сообщение или уведомление. Так будет проще не пропустить его.
Показывать границы элементов
Это пункт не имеет особой полезной нагрузки для простого пользователя. Просто можно увидеть где находятся границы элементов управления и экранных клавиш. Иногда может быть полезным, если хочеться проверить соответствие касаний расположенным элементам.
Написание справа налево
Этот пункт позволит расположить ползунки слева, а текст прижать к правому краю экрана. Просто все станет не так, как это общепринято. Нужно это возможно для левшей или просто людей, которые хотят сделать что-то необычное и немного изменить рутинный интерфейс своего смартфона.
Анимация
Настройка длительности анимации позволит визуально ускорить работу системы. Или наоборот сделать ее очень медленной. Второе возможно понадобится для того, чтобы разыграть не особо разбирающегося в тонкостях настроек друга.
Эмуляция дополнительных экранов
Позволит разработчикам имитировать различные размеры и разрешения экрана.
GPU-ускорение
Настройка позволяет заставить приложения использовать ускорение, если для них это не предусмотрено по умолчанию. Может существенно помочь в работе с графикой, но может и все испортить. Не рекомендовали бы увлекаться работой с этим пунктом.
Показывать обновление экрана
Настройка позволяет подсвечивать области экрана, которые были отрисованы графической подсистемой.
Включить 4x MSAA
Включение принудительной множественной выборки сглаживания. Но естественно надо иметь ввиду, что как и с любым графическим процессом, чем больше сглаживание, тем лучше выглядит картинка, но производительность при этом снижается.
Отключение передачи аудио (USB)
Настройка позволяет отключить автоматическую маршрутизацию на внешние USB-устройства.
Строгий режим
Настройка активирует режим мигания экрана, в том случае, если приложение использует главный поток для выполнения длительной и интенсивной операции.
Загрузка процессора
Позволяет отобразить на экране в виде цветной диаграммы загрузку центрального процессора, или графического чипа. При любых действиях диаграмма меняется и прокручивается. При этом, загрузку графического чипа можно отображать на экране, а можно записывать в специальный файл.
Не сохранять действия
Активация этого пункта позволит удалять сводку действий приложения после того как оно будет закрыто. Двоякое явление. Не всегда это будет хорошо.
Лимит фоновых процессов
Полезная опция для сохранения аккумулятора и производительности смартфона. Из названия видно, что она устанавливает лимит на количество фоновых процессов, которые могут работать одновременно.
Все ANR
Если хочется видеть уведомление системы о том, что приложение не работает или работает не так как должно, то активация этого пункта позволит получать подобные уведомления.
Неактивные приложения
В этом пункте находится встроенный диспетчер неактивных приложений, который позволит регулировать их активность.
Разрешить сохранение на внешние накопители
Если штатно для приложения не предусмотрена возможность установки на внешний накопитель, то активация этого пункта позволит это сделать независимо от “желания” приложения. Но не стоит забывать, что часто приложения не просто так отказываются устанавливаться на внешний накопитель и для этого есть свои причины. Поэтому, если активируете эту возможность, будьте готовы, что что-то может пойти не так.
Изменение размера многооконности
Настройка позволяет менять размер окон в режиме многооконности независимо от того, согласно ли на это приложение. Опять же, если разработчик был против этого, то наверняка у него были не это причины и лучше не лезть в это.
Отключение режима разработчика
Как и было сказано в начале, режим разработчика можно отключить. Хотя отключается он немного другим способом, нежели включается. Для отключения надо будет открыть настройки и перейти в раздел “приложения”. После этого нужно будет найти приложение “Настройки” и зайдя в него стереть все данные. Если это сделать, режим разработчика будет отключен. А если понадобится включить его снова, то сделать это можно будет там же способом, который был описан в начале.
Итоги
Мы рассказали вам про меню настроек разработчика и что означают основные пункты. Как вы поняли, большинство пунктов не для простых пользователей. Они понадобятся или тем, кто действительно является разработчиком, или тем, кто хочет на свой страх и риск поподробнее разобраться в возможностях операционной системы от Google. Еще раз добавим, что если навыков в этой области мало, то лучше даже не пробовать.
Каково главное преимущество и недостаток «не держать действия» в android
Один запрос, который я хотел бы получить, если бы кто-нибудь мог ответить на него, как: Do not keep activities следует проверять параметры Do not keep activities во время тестирования мобильного приложения Android от разработчиков.
Я использовал его в своем приложении и обнаружил, что мое приложение ведет себя некорректно и разбилось, когда я включил. Do not keep activities в android.
Мои вопросы были несколько:
1: How much this option will affect mobile applications?
2: What exactly does this do?
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Каковы были преимущества и недостатки его использования при сохранении. Do not keep activities Просьба поделиться опытом.
Насколько этот параметр повлияет на мобильные приложения?
Если они хорошо написаны, этот вариант не повлияет на них.
Если этот параметр включен, только переменные, хранящиеся в активности с методом onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложению в фоновом режиме. Все остальные переменные будут немедленно удалены. Когда этот параметр выключен, есть вероятность, что эта переменная будет сохранена
Нет, это означает, что все не сохраненные переменные будут удалены. Когда вы в пример нажмите кнопку «домой».
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Нет, это только помогает правильно разработать приложение. Это помогает прогнозировать неожиданные ситуации.
Do not Keep Activities – это просто вариант разработчика, который поможет вам проверить, не
2. Handled малого объем память Ситуация, соответствующий образ (в этом случае активность будет уничтожена). ̶
Изменить : этот параметр не эмулирует ситуации с низкой памятью. Когда устройство испытывает низкую память, система может запросить операцию «Drop», вызывая Finish (), или она может идти вперед и полностью уничтожить процесс, как говорится в комментарии.
ПРЕИМУЩЕСТВА :
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, то устройство будет работать медленно, и все действия будут воссозданы во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ дается в форуме разработчиков xda об использовании этой опции
Поэтому для проверки такого полного случая вы должны остановить приложение вручную, но не отбрасывайте его из диспетчера задач. Самый простой способ – с красной квадратной кнопкой в андроид-студии. И снова откройте приложение.
Преимущество «Не сохранять активность» заключается в том, что он эмулирует системную ситуацию с низкой памятью, когда она начинает убивать разные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода строгим и убивает только действия, когда нет способа подражать этому для служб
Мы нашли секретный способ управлять фоновыми процессами в телефоне. Показываем
Работа смартфона — весьма сложный процесс, который не прекращается ни на минуту даже ночью, когда телефон лежит у вас под подушкой. Большинство процессов в смартфоне продолжают свою работу незаметно для глаз пользователя и могут потреблять достаточно большое количество ресурсов.
Многие пользователи ошибочно считают, что оперативную память «съедают» те приложения, которые остаются свернутыми, и если их закрыть, можно таким образом освободить бОльшую часть памяти.
На самом деле это не так. Свернутые приложения, находящиеся в режиме ожидания — это лишь верхушка айсберга. По сути – это только кэшированные данные, которые позволяют вам вернуться в приложение без потери последних данных. Закрыв их, вы сможете лишь немного освободить оперативную память телефона. Основная же часть ресурсов приходится на процессы или службы приложений. Именно они потребляют оперативную память и расходуют заряд батареи даже тогда, когда приложение закрыто.
Не все из них одинаково полезны, но есть и те, которые могут отвечать за безопасность устройства и его стабильную работу. Тем не менее, если телефон стал слишком задумчивым и вы замечаете, что он потребляет заряд батареи, даже находясь в режиме ожидания, вам будет полезно узнать как ограничить работу фоновых процессов и тем самым освободить оперативную память устройства, а также повысить его быстродействие.
Как управлять фоновыми процессами
Получить расширенный контроль над фоновыми процессами можно с помощью специальных инструментов, встроенных в операционную систему. В смартфонах Android эта возможность реализована с помощью скрытого меню для разработчиков.
Как включить параметры разработчика
Для того, чтобы активировать режим разработчика, необходимо перейти в Настройки телефона, открыть пункт «Сведения о телефоне», затем «Сведения о ПО» и несколько раз подряд нажать на пункт «Номер Сборки» до появления системного уведомления о том, что режим разработчика активирован.
Затем нужно вернуться назад, в главные настройки. Если все было сделано правильно, вы увидите, что внизу появился новый пункт меню «Параметры разработчика».
Как управлять фоновыми процессами
Для того, чтобы управлять фоновыми процессами, в меню «Параметры разработчика» необходимо найти пункт «Приложения». Здесь находится несколько параметров, отвечающих за работу фоновых процессов. Например, параметр «Вытеснение фоновых Activity» позволяет принудительно останавливать действия приложений после их закрытия (не рекомендуем включать), а параметр ANR в фоновом режиме — отображать фоновые уведомление в случае, когда какой-то процесс не отвечает.
Больше всего нас здесь интересует параметр «Лимит фоновых процессов», который позволяет выбрать какое количество процессов будет использоваться вашим смартфоном в фоне. Данное ограничение затрагивает в основном сторонние приложения, установленные пользователем, поэтому можно не переживать за работающие системные службы.
По умолчанию здесь установлено значение «Стандартное ограничение».
Для слабых смартфонов с небольшим количеством оперативной памяти можно ограничиться значением «не более 1−2 процессов». Для устройств «пошустрее» можно установить лимит «не более 4 процессов».
Полное отключение фоновых процессов может повлиять на корректную работу некоторых приложений, поэтому мы не рекомендуем использовать данную функцию по максимуму, особенно если вы активно пользуетесь мессенджерами, почтой и другими приложениями, которые требуют проверки уведомлений.
Заключение
Теперь вы знаете, как, изменив лимит фоновых процессов, можно существенно снизить потребление оперативной памяти и повысить общее быстродействие смартфона. Но помните, что использовать меню разработчика стоит только в том случае, если у вас наблюдаются существенные проблемы в работе устройства и не пренебрегайте этим правилом без крайней необходимости, в противном случае есть риск навредить работе гаджета.
Памятка по жизненному циклу Android — часть I. Отдельные Activity
Android спроектирован так, чтобы использование приложения пользователем было максимально интуитивным. Например, пользователи приложения могут повернуть экран, ответить на уведомление или переключиться на другое приложение, и после этих манипуляций они все так же должны иметь возможность продолжить использовать приложение без каких-либо проблем.
Чтобы обеспечить такое взаимодействие с пользователем, вы должны знать, как управлять жизненными циклами компонентов. Компонентом может быть Activity, Fragment, Service, класс Application и даже сам процесс приложения. Компонент имеет жизненный цикл, в течение которого он проходит через различные состояния. Всякий раз, когда происходит переход, система уведомляет вас об этом при помощи методов жизненного цикла.
Чтобы нам было легче объяснить, как работает жизненный цикл в Android, мы определили несколько сценариев (примеров из жизни), которые сгруппированы по компонентам:
Часть 1: Activity — ЖЦ одного активити (этот пост)
Диаграммы также доступны в виде шпаргалки в формате PDF для краткого ознакомления.
Примечание: эти диаграммы соответствуют поведению в Android P/Jetpack 1.0.
Следующие сценарии демонстрируют поведение компонентов по умолчанию, если не указано иное.
Если вы обнаружили ошибки в статье или считаете, что не хватает чего-то важного, напишите об этом в комментариях.
Часть 1: Activity
Пользователь нажимает кнопку Назад или
Вызван метод Activity.finish()
Самый простой сценарий показывает, что происходит, когда приложение с одним активити запускается, завершается и перезапускается пользователем:
Управление состоянием
onSaveInstanceState не вызывается (поскольку активити завершено, вам не нужно сохранять состояние)
onCreate не имеет Bundle при повторном открытии приложения, потому что активити было завершено и состояние не нужно восстанавливать.
Пользователь нажимает кнопку «Домой»
Пользователь переключается на другое приложение (через меню «Все приложения», из уведомления, при принятии звонка и т. д.)
В этом случае система остановит активити, но не завершит его сразу.
Управление состоянием
Когда ваше активити переходит в состояние Stopped, система использует onSaveInstanceState для сохранения состояния приложения на тот случай, если впоследствии система завершит процесс приложения (см. ниже).
Предполагая, что процесс не был убит, экземпляр активити сохраняется в памяти, сохраняя все состояние. Когда активити возвращается на передний план, вам не нужно повторно инициализировать компоненты, которые были созданы ранее.
Изменена конфигурация, такие как поворот экрана
Пользователь изменил размер окна в многооконном режиме
Управление состоянием
Изменения конфигурации, такие как поворот или изменение размера окна, должны позволить пользователям продолжить работу с того места, где они остановились.
Активити полностью уничтожено, но состояние сохраняется и восстанавливается при создании нового экземпляра.
Включён многооконный режим (API 24+) и потерян фокус
Другое приложение частично покрывает работающее приложение: диалоговое окно покупки (in-app purchases), диалоговое окно получения разрешения (Runtime Permission), стороннее диалоговое авторизации и т. д.
Появится окно выбора приложения (при обработке неявного интента), например диалоговое окно шейринга.
Этот сценарий не применим к:
Диалогам в том же приложении. Отображение AlertDialog или DialogFragment не приостанавливает базовое активити.
Уведомлениям. Пользователь, получающий новое уведомление или открывающий панель уведомлений, не приостанавливает текущее активити.