Что такое вытеснение фоновых activity на андроид
Перейти к содержимому

Что такое вытеснение фоновых activity на андроид

  • автор:

Как ускорить работу Android

Смартфоны на Android славятся тем, что спустя время на них начинаются проблемы с производительностью, что особенно остро ощущается на бюджетных смартфонах. Сегодня попробуем помочь вам избавиться от лагов:

Анимации — да-да, весьма неплохо так кушают ресурсы вашего телефона. Заходим в параметры разработчика (предварительно включив их многочисленными тапами по номеру сборки в «Сведениях о ПО»), находим пункт с анимациями и у всех трёх параметров выбираем «без анимации»;

Меньше фоновых процессов — там же находим пункт «Лимит фоновых процессов» и изменяем его. Советуем экспериментальным путём выяснить оптимальное показатель и не выключать фоновые процессы совсем, ведь это может сказаться на работе телефона;

Экономим оперативку — чуть выше прошлого пункта есть параметр «вытеснение фоновых 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. По документации, нужно вызвать

VKUIHelper.onActivityResult(requestCode, resultCode, data); 

однако, в случае уничтожения активити нашего приложение, вылетит NPE, поэтому сначала нужно вызвать

VKUIHelper.onResume(this); 

Не совсем очевидно, да и незадокументировано. Завел issue, на всякий.

Были проблемы с Facebook, потому как, по глупости своей, я решил использовать android-simple-facebook, а ее автор, как я понял, не особо парился по поводу android lifecycle. Пришлось полностью от него отказаться и переделывать все на официальный SDK Facebook и все проблемы ушли. Хотя, наверное, можно было и так все поправить одной строчкой, но пути назад уже не было.

И совсем не было проблем с Twitter, потому что все работает просто, как топор. У них просто нет своего SDK и авторизации через приложение. Приходится делать все по старинке, через WebView. Вообще у них самая ужасная авторизация из всех.
Ну да это так, лирическое отступление.

Есть проблемы с PayPal SDK, оно просто валится везде где только можно. Благо кто-то уже завел issue до меня и наверняка они в скором будущем это поправят.

Другие примеры

У меня не много приложений на телефоне, да и смотреть их все мне, если честно, лень, но я не мог пройти мимо недавно вышедшего приложения хабра. Начнем, конечно же, с него. Ну и добавлю ошибку Payoneer, которую нашел случайно:)

Хабрахабр

Я потыкался по разным экранам и уже было расстроился, неужели все написано правильно и один лишь я делаю столько ошибок. Но нет, я таки добрался до страницы About:

Caused by: java.lang.NullPointerException at ru.habrahabr.activity.about.AboutFragment.onAttach(AboutFragment.java:44) 
Payoneer

Много времени не понадобилось. Экран логина, ушел в keepass за паролем, вернулся — гипс крэш:

Caused by: java.lang.NullPointerException at com.payoneer.android.ui.fragment.LoginFragment.initializeOnCreateData(LoginFragment.java:379) at com.payoneer.android.ui.fragment.LoginFragment.onCreate(LoginFragment.java:152) 

Ещё есть некоторые приложения без крэшэй, но с неправильным поведением, например, не сохраняется открытый фрагмент, а вместо него, после пересоздания, снова показывается главный экран приложения.

P.S.

Используйте настройку «Do not keep activities», надеюсь для кого-то эта информация окажется новой и поможет избежать ошибок поведения и крэшэй.
Думаю тоже смог бы избежать кучи репортов в Google Play, если бы сразу знал об этой настройке.

Ах да, репорты отправил.

  • android development
  • android
  • appgranula

Вытеснение фоновых Activity в режиме разработчика — что это такое?

Что такое вытеснение фоновых Activity в режиме разработчика на смартфоне?

Режим разработчика — особый раздел, который можно включить на любом смартфоне на Android. В нем содержатся дополнительные настройки, позволяющие собирать статистику, совершать отладку, ускорять интерфейс, а также другие инструменты для более расширенной работы с ПО телефона. Одна из функций режима разработчика — вытеснение фоновых Activity.

Зачем нужно вытеснение фоновых Activity в режиме разработчика?

Вытеснение фоновых Activity — функция, которая позволяет увеличить быстродействие работы телефона. Значительную часть оперативной памяти занимают приложения, работающие в фоне, т.е. после того, как пользователь их закрыл. Функция «Вытеснение фоновых Activity» позволяет принудительно выгружать части приложений, чтобы «разгрузить» оперативную память.

Вытеснение фоновых activity

Этот инструмент включает автоматическую очистку кэша (временных файлов) сразу после того, как приложение будет закрыто. Однако активация этой функции может повлечь за собой такие проблемы, как вылет приложений или их зависание. В таком случае рекомендуется ее отключить.

Чтобы включить или выключить вытеснение фоновых Activity, пользователю необходимо:

  1. Включить режим разработчика. Для этого нужно открыть раздел «О телефоне», а затем 5-7 раз нажать на строку «Номер сборки», чтобы появилось уведомление о включении режима разработчика.
  2. Найти в настройках телефона появившийся раздел «Для разработчиков».
  3. В подразделе «Приложения» найти строку «Вытеснение фоновых Activity» и либо активировать ползунок, либо его деактивировать.

Что такое вытеснение фоновых activity на андроид

You can test this app and submit issues during the testing period of the November 2021 Android Contest contest.

Entries with serious issues will not be able to win the contest, but even minor issues might be important for overall results.

Voting

Comments

Выполнено все 3 задания

Обратить внимание:
1. Если во время просмотра сообщений в превью календаря — юзер получит сообщение, то оно не будет удалено(при удалении из превью), так как считается что оно еще не было прочитано. Также не будут удалены сообщения пришедшие после открытия календаря(но если превью не было открыто). Сохранена логика плавающих дат — первое нажатие скролит чат к первому сообщению в этот день, второе открывает календарь.

2. При открытие селектора скрывается кнопка “прокрутки к последнему” сообщению, также продуман показ в альбомном режиме с открытой клавиатурой(селектор не скрывается под меню выбора). Также встроена подсказка над селектором, которая имеет ту же логику что и другие подсказки.

3. Запрещенная пересылка, запрет на скрин и тд обновляются без перезагрузки чата.

Замечания:
1. В меню переключения группы private-public баг, как серверный(иногда нет ответа), так и клиентский(не ждет ответа от сервера и меняет данные) — Я исправил клиент, чтобы он дожидался ответа или показывал ошибку, если ожидание превышено, и устранил рассинхрон данных..

2. Также отпадает функционал revoke при достигнутом лимите публичных групп, ссылка просто не отзывается.

3. Переключение private-public уведомляет другие клиенты только в первый раз, больше от сервера никаких оповещений(тут возможно я ошибаюсь).

4. Баг с календарем, изображения не всегда отображается в нужный день. Я пробовал исправить, но это тоже сервер.

По вышеперечисленным причинам(которые присутствуют в текущей релизной версии) не удалось добиться нормального апдейта интерфейса при переключении типа группы/канала

You have not added any comments yet.

Issues

Fair Mammoth Nov 18, 2021 at 23:04

Выполнено задач: 3/3

В ходе тестирования приложения были выявлены недоработки, включая падения приложения, количество которых помешало продвижению работы на более высокое призовое место.

1. Запрет на пересылку и сохранение медиафайлов:
1.1 Пользователь может обойти запрет на пересылку и копирование в следующих ситуациях:
– В музыкальном плеере отображаются функциональные кнопки Share/Save to music – позволяющие поделиться или сохранить файл.
– Приложение отрисовывает активную кнопку Share при переходе между несколькими видео в просмотрщике, позволяя поделиться файлом.
1.2 Пользователь может обойти запрет на скриншоты через переход в раздел закрепленных или запланированных сообщений с последующим возвращением на экран чата.
1.3 Пользователь может пересылать посты из каналов по нажатию на кнопку Forward рядом с каждым из них. При этом открывается интерфейс с возможностью выбрать сущность и отправить пересланное сообщение (ограничение будет обработано сервером).
1.4 Расстояние между плашкой с подсказкой об активном запрете на пересылку сообщений и контекстным меню не соответствует предоставленному дизайну.
1.5 Описание пункта Group / Channel Type может не меняется при включении запрета на пересылку сообщений.
1.6 Приложение отображает подсказку о запрете на пересылку для сервисных сообщений (Alex added you to this group и так далее).
1.7 Подсказка о запрете на пересылку сообщений отображается в разделе запланированных сообщений.
1.8 Кнопка ⋮ всё ещё выводится в просмотрщике GIF.

Samsung Galaxy A51 (Android 11); Xiaomi Redmi Note 8 Pro (Android 10); Samsung Galaxy S10 (Android 11).

Fair Mammoth Nov 18, 2021 at 23:04

2. Отправка сообщений от имени канала в публичных группах:
2.1 Размер окна выбора публичного канала не соответствует дизайну предоставленных макетов.
2.2 Приложение не оптимизировано для выбора сущности из списка каналов в альбомной ориентации.
2.3 Цвет автора в отправленном сообщении от имени канала некорректен.
2.4 Приложение может вылететь при развернутом слое со списком публичных каналов, если в этот момент у пользователя отзываются права администратора в открытой группе.
2.5 Приложение отображает некорректную иконку при отправке сообщений от своего имени.
2.6 Отметим начатую работу над анимацией списка каналов. Однако при выборе канала не хватает эффекта Ripple, а анимация сворачивания списка может проигрываться быстрее.

3. Удаление сообщений в выбранном диапазоне:
3.1 Кнопки Select Days и Clear History не соответствует дизайну предоставленных макетов.
3.2 В предпросмотре дня смаргивает счетчик сообщений.
3.3 В предпросмотре дня сообщения появляются со смаргиванием.

Samsung Galaxy A51 (Android 11); Xiaomi Redmi Note 8 Pro (Android 10); Samsung Galaxy S10 (Android 11).

4) Краш. Воспроизводится стабильно. Открываем приложение без интернета. Заходим в чат где есть возможность отправить сообщение от канала. Кликаем на иконку в левом нижнем углу. Крутится троббер. Отменяем запрос на сервер. Кликакем еще раз эту иконку(почему-то она с крестиком уже) и будет краш.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *