- Вытеснение фоновых Activity в режиме разработчика — что это такое?
- Зачем нужно вытеснение фоновых Activity в режиме разработчика?
- Do not keep activities
- Не сохранять операции
- Другие примеры
- Хабрахабр
- Payoneer
- [Прочее] Оптимизируем MIUI: отключаем фоновую запись действий пользователя на Xiaomi (Redmi)
- В чем главное преимущество и недостаток «не сохранять активности» в Android
- 6 ответов
- Каково главное преимущество и недостаток «не держать действия» в android
Вытеснение фоновых Activity в режиме разработчика — что это такое?
Что такое вытеснение фоновых Activity в режиме разработчика на смартфоне?
Режим разработчика — особый раздел, который можно включить на любом смартфоне на Android. В нем содержатся дополнительные настройки, позволяющие собирать статистику, совершать отладку, ускорять интерфейс, а также другие инструменты для более расширенной работы с ПО телефона. Одна из функций режима разработчика — вытеснение фоновых Activity.
Зачем нужно вытеснение фоновых Activity в режиме разработчика?
Вытеснение фоновых Activity — функция, которая позволяет увеличить быстродействие работы телефона. Значительную часть оперативной памяти занимают приложения, работающие в фоне, т.е. после того, как пользователь их закрыл. Функция «Вытеснение фоновых Activity» позволяет принудительно выгружать части приложений, чтобы «разгрузить» оперативную память.
Этот инструмент включает автоматическую очистку кэша (временных файлов) сразу после того, как приложение будет закрыто. Однако активация этой функции может повлечь за собой такие проблемы, как вылет приложений или их зависание. В таком случае рекомендуется ее отключить.
Чтобы включить или выключить вытеснение фоновых Activity, пользователю необходимо:
- Включить режим разработчика. Для этого нужно открыть раздел «О телефоне», а затем 5-7 раз нажать на строку «Номер сборки», чтобы появилось уведомление о включении режима разработчика.
- Найти в настройках телефона появившийся раздел «Для разработчиков».
- В подразделе «Приложения» найти строку «Вытеснение фоновых Activity» и либо активировать ползунок, либо его деактивировать.
Источник
Do not keep activities
Не сохранять операции
«Не сохранять операции» — именно таким странным образом переведена фраза «Do not keep activities» в настройках Android. А описание «Удалять все операции сразу после их завершения пользователем» не добавляет ясности. Включается она в меню «Параметры разработчика» (Developer Options), находится в самом низу.
Работает эта настройка очень просто, когда она включена, все неактивные активити умирают. Т.е. после перехода из активити A в активити B, активити A уничтожается. Таким образом можно проверить насколько вписывается ваше приложение в activity lifecycle.
Не хочется вдаваться в подробности lifecycle, но, в двух словах, система убивает фоновую активити когда захочет. В реальности это происходит не так редко, так что не стоит этим пренебрегать. Например, вам кто-то позвонил. Во время вашего разговора система может убить активити приложения, которым вы только что пользовались.
Или, самый простой способ убить активити — повернуть экран (если не android:configChanges=«keyboardHidden|orientation|screenSize»). Но не все приложения поддерживают поворот экрана. Да и те, которые поддерживают, встречаются с ошибками lifecycle на этапе разбработки, так что у них как раз проблем и не должно быть. Второй простой способ — сменить язык устройства.
Ну и разумеется можно просто включить «Do not keep activities».
Я потратил несколько дней на исправление ошибок, после того как прошелся по своему приложению с «Do not keep activities». Теперь, думаю, стоит всегда включать эту настройку на время разработки. Главной моей проблемой было корректное подключение социальных сетей в приложении.
Почти не возникло проблем с Вконтакте, с их 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, если бы сразу знал об этой настройке.
Источник
[Прочее] Оптимизируем MIUI: отключаем фоновую запись действий пользователя на Xiaomi (Redmi)
|
IMG_20200522_104403-840×525.png (89.06 KB, Downloads: 0)
2020-05-30 21:34:31 Upload
Чем глубже изучаешь MIUI на Xiaomi (Redmi), тем больше понимаешь как много функций возможно отключить, или перенастроить, чтобы улучшить автономность телефона, увеличить его производительность и добиться более предсказуемой и плавной работы.
Каждая настройка отдельно слабо влияет на общее впечатление от работы с Xiaomi, но когда их отключишь все, станет заметно насколько MIUI будет работать быстрее, отзывчивее и плавнее, при этом увеличиться автономность смартфона.
Сегодня я покажу вам одну настройку в меню для разработчиков на Xiaomi, которая ведёт постоянную запись в лог всех действий пользователя почти во всех приложениях. Строго говоря, запись ведётся только в тех программах, которые поддерживают эту функцию, но это почти все приложения, обновлённые за последний год.
Факт записи активности пользователя на Xiaomi не сильно влияет на производительность, но всё зависит от частного случая и конкретного приложения. После того, как я отключил её, мой телефон начал плавнее листать ленту в приложениях социальных сетей, и анимация переключения между приложениями также стала воспроизводиться стабильнее. Возможно, это самовнушение, но в любом случае обычному пользователю, не разработчику, запись вести нет необходимости, к тому же эти логи занимают драгоценную память Xiaomi.
Прежде всего необходимо получить права разработчика: Настройки / О телефоне / Нажимаем на ВЕРСИЯ MIUI нескольео раз, пока не появится надпись на экране ВЫ СТАЛИ РАЗРАБОТЧИКОМ.
4.jpg (277.21 KB, Downloads: 0)
2020-05-30 21:29:00 Upload
После этого: Настройки / Расширенные настройки /Для разработчиков / Трассировка системы
Теперь оключаем функцию ЗАПИСЫВАТЬ ДЕЙСТВИЯ ПРИЛОЖЕНИЙ, ДОСТУПНЫХ ДЛЯ ОТЛАДКИ
5.jpg (359.4 KB, Downloads: 0)
2020-05-30 21:29:07 Upload
И нажимаем УДАЛИТЬ СОХРАНЕННЫЕ ЗАПИСИ ДЕЙСТВИЙ, чтобы освободить память от ненужных нам записей, которые могут занимать сотни мегабайт.
Всё, мы отключили ещё одну функцию, которая потребляла энергию, ухудшала производительность Xiaomi и зря занимала память.
Проверено лично на Xiaomi mi 9t pro
Источник
Источник
В чем главное преимущество и недостаток «не сохранять активности» в Android
Один вопрос, который я хотел бы получить, если бы кто-нибудь мог ответить на него, например: 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?
Это похоже на убийцу приложений, я заметил в параметрах разработчика поле с надписью Не сохранять действия — destroy every activity as soon as the user leaves it .
Создает ли это положительную или отрицательную функциональность в моих приложениях?
Означает ли это, что если я открываю приложение и как только выхожу из него, оно фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы вручную убить его? Если да, то разве это не хорошая вещь для снижения использования ОЗУ?
Каковы были преимущества и недостатки его использования при сохранении Do not keep activities , пожалуйста, поделитесь своим опытом.
6 ответов
Насколько эта опция повлияет на мобильные приложения?
Если они хорошо написаны, эта опция на них не повлияет.
Если этот параметр включен, только переменные, которые сохраняются в активности с помощью метода onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложение перейдет в фоновый режим. Все остальные переменные будут немедленно удалены. Когда эта опция выключена, существует вероятность, что эта переменная будет сохранена.
Означает ли это, что если я открываю приложение и как только выхожу из него, оно фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы вручную убить его?
Нет, это означает, что все несохраненные переменные будут удалены. Например, когда вы нажимаете кнопку «Домой».
Создает ли это положительную или отрицательную функциональность в моих приложениях?
Нет, это только помогает правильно разработать приложение. Помогает предугадывать неожиданные ситуации.
Преимущество «Не сохранять действия» заключается в том, что он имитирует ситуацию с нехваткой памяти в системе, когда она начинает убивать различные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода ограниченным и убивает только действия, когда нет возможности эмулировать это для служб.
ОС Android имеет это свойство, чтобы стирать действия, выполняющиеся в фоновом режиме, если на устройстве мало памяти , отдавая приоритет только тем действиям, которые выполняются наверху.
Опция Do not keep activities рядом с Developer options позволяет разработчикам легко воспроизвести тот же сценарий.
В идеале хорошо разработанное Android-приложение должно обрабатывать onSaveInstanceState и onRestoreInstanceState сохранение и восстановление локальных переменных всех действий.
Более подробная информация представлена здесь на официальном сайте разработчиков Android.
В дополнение к приведенным выше ответам есть еще один, не видимый с первого взгляда недостаток , заключающийся в том, что вы можете проверить только активность , уничтожая / воссоздавая проблемы с этой опцией, но не весь процесс восстановление приложения из-за нехватки памяти или других системных условий, потому что все не зависит от активности памяти.
Представьте, что у вас есть синглтон , от которого зависят ваши классы. После того, как система убьет приложение, ваши синглтоны также будут очищены и восстановлены с начальным состоянием, если вы не реализовали его восстановление самостоятельно. Таким образом, несмотря на то, что ваше состояние просмотра активности и поля будут восстановлены, если onSaveInstanceState и onRestoreInstanceState были реализованы правильно, это не гарантирует правильного поведения приложения после восстановления, даже на конкретном экране. Это следует учитывать
Поэтому, чтобы полностью протестировать такой случай, вы должны остановить приложение вручную, но не бросать его из диспетчера задач. Самый простой способ — с помощью кнопки остановки красного квадрата в студии Android. И снова откройте приложение.
ПРЕИМУЩЕСТВО :
Разработчик может проверить ненормальное поведение своего приложения и исправить случаи low memory — framework kills the application
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, устройство будет работать медленно, и все действия будут воссозданы заново во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ об использовании можно найти на форуме разработчиков xda. этого варианта
Не сохранять действия — это исключительно вариант разработчика, который поможет вам проверить,
- Вы сохранили состояние действия до того, как оно перейдет в фоновый режим.
2. Handled малым объемом памяти Ситуации, соответствующим образом (в этом случае активность будут уничтожены). ̶
Изменить : этот параметр не имитирует ситуации с нехваткой памяти. Когда на устройстве не хватает памяти, система может запросить операцию Drop, вызвав Finish (), или она может продолжить и полностью убить процесс, как говорится в комментарии.
С включенной опцией по-прежнему хорошо разрабатывать. Вам нужно будет правильно запрограммировать методы onSaveInstanceState() и onRestoreInstanceState() . Таким образом, даже если процесс будет остановлен, когда пользователь вернется к этому действию, onCreate () будет вызываться с сохраненнымInstanceState, который был сохранен в методе onSaveInstanceState(Bundle) .
Источник
Каково главное преимущество и недостаток «не держать действия» в 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 – destroy every activity as soon as the user leaves it .
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Означает ли это, если я открою приложение, и как только я его покину, он фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы его вручную убить? Если да, разве не так хорошо поддерживать низкое использование ОЗУ?
Каковы были преимущества и недостатки его использования при сохранении. Do not keep activities Просьба поделиться опытом.
Насколько этот параметр повлияет на мобильные приложения?
Если они хорошо написаны, этот вариант не повлияет на них.
Если этот параметр включен, только переменные, хранящиеся в активности с методом onSaveInstanceState будут сохранены, когда вы перейдете к другому действию или приложению в фоновом режиме. Все остальные переменные будут немедленно удалены. Когда этот параметр выключен, есть вероятность, что эта переменная будет сохранена
Означает ли это, если я открою приложение, и как только я его покину, он фактически закрывает это приложение, и я не увижу его в диспетчере задач, чтобы его вручную убить?
Нет, это означает, что все не сохраненные переменные будут удалены. Когда вы в пример нажмите кнопку «домой».
Создает ли это какие-либо положительные или отрицательные функции в моих приложениях?
Нет, это только помогает правильно разработать приложение. Это помогает прогнозировать неожиданные ситуации.
Do not Keep Activities – это просто вариант разработчика, который поможет вам проверить, не
- Вы сохранили состояние своей деятельности, прежде чем перейти к фону.
2. Handled малого объем память Ситуация, соответствующий образ (в этом случае активность будет уничтожена). ̶
Изменить : этот параметр не эмулирует ситуации с низкой памятью. Когда устройство испытывает низкую память, система может запросить операцию «Drop», вызывая Finish (), или она может идти вперед и полностью уничтожить процесс, как говорится в комментарии.
По-прежнему полезно разрабатывать эту опцию. Вам нужно будет правильно закодировать onSaveInstanceState() и onRestoreInstanceState() . Делая это, даже если процесс будет убит, когда пользователь перейдет к этой активности, onCreate () будет вызван с сохраненнымInstanceState, который был сохранен в onSaveInstanceState(Bundle) .
ПРЕИМУЩЕСТВА :
Разработчик может проверить ненормальное поведение своего приложения и исправить случаи с low memory — framework kills the application
НЕДОСТАТКИ :
Если пользователь неосознанно включил эту опцию, то устройство будет работать медленно, и все действия будут воссозданы во время навигации пользователя на его устройстве. Это затруднит работу пользователя
Очень хороший ответ дается в форуме разработчиков xda об использовании этой опции
В дополнение к приведенным выше ответам еще один, не видный из первого недостатка, который вы можете проверить с помощью этой опции только проблемы с уничтожением / восстановлением активности , но не весь процесс восстановления приложений из-за нехватки памяти или других системных условий, поскольку все независимые Из памяти операции остается.
Представьте, что у вас есть синглтон, на котором ваши классы зависят. После того, как система убила приложение, ваши синглеты будут также очищены и восстановлены с начальным состоянием, если вы не выполнили его восстановление самостоятельно. Таким образом, несмотря на ваше состояние активности, состояния и поля будут восстановлены в случае правильной реализации onSaveInstanceState & onRestoreInstanceState , это не гарантирует правильное поведение приложения после восстановления даже на конкретном экране. Это следует учитывать
Поэтому для проверки такого полного случая вы должны остановить приложение вручную, но не отбрасывайте его из диспетчера задач. Самый простой способ – с красной квадратной кнопкой в андроид-студии. И снова откройте приложение.
Преимущество «Не сохранять активность» заключается в том, что он эмулирует системную ситуацию с низкой памятью, когда она начинает убивать разные части приложения. Ваше приложение должно поддерживать эту ситуацию. Недостатком является то, что этот вариант является своего рода строгим и убивает только действия, когда нет способа подражать этому для служб
Источник