См жизненный цикл multiwindow https://developer.android.com/guide/topics/ui/multi-window.html?hl=ru
Фреймворк не будет лагать в таком режиме. Просто UI задачи предназанченные для специфичной Activity будут выполняться только тогда, когда Activity будет реально актинвной. ИМХО случай довольно редкий, к тому же не вызовет ошибок. Помечу, эту особенность в Javadoc-е
но все же нехорошо хранить ссылки на активити в контексте процесса.
+ «current Activity» вообще-то может быть больше одной штуки
Я вызываю setCurrentActivity в событии onResume. Каким образом их будет несколько?
Это одна из самых крутых утечек памяти из возможных на андроиде.
Я вызываю setCurrentActivity(null) на каждом onPause
Каким образом утечет память? См https://developer.android.com/guide/components/activities/activity-lifecycle.html
instantrun наверное на этом сильно поперхнется и не обновит ссылку
Ок, давайте на практическом примере.
Моя задача, реализация процесса регистрации:
1) Получаю от пользователя первую порцию данных
2) Выполняю шаг регистрации 1. Последовательно отправляется N различных запросов. Тут я хочу показывать пользователю, что именно сейчас программа делает
3) Получаю от пользователя вторую порцию данных
4) Выполняю шаг регистрации 2. Последовательно отправляется M различных запросов. Тут я хочу показывать пользователю, что именно сейчас программа делает
Для того, что бы фреймворк знал, какая именно Activity сейчас работает.
У фреймворка есть возможность запускать задачи UI при выполнении предусловий см https://mkabramyan.github.io/Asmyk/net/mabramyan/asmyk/core/AsmykUITask.html
Например вы можете выполнить какое либо UI задание из фоновой задачи/сервиса под конкретную Activity или при каких либо специфичных условиях (одно ограничение, проверка должна быть относительно быстрой).
Предусловия описываются в методе isApplicatble()
Запустить задачу вы можете вызвав метод runUITask экземпляра класса AsmykApplicationContext.
Если вы укажете параметр postpone=true, тогда задача будет выполнена если isApplicatble вернет true.
Если isApplicable вернет false задача будет отложена. Как только сменится текущая Activity проверка isApplicatble будет вызвана снова и так до тех пор пока isApplicatble не вернет true. Это позволяет однозначно выполнить специфичную UI задачу из фоновой операции.
Спасибо за вопрос, надеюсь у меня получилось описать понятно
Спасибо за критику, данная конструкция добавлена для того, что бы не получилось так, что фоновая задача выполнилась быстрее чем запустилась Activity, например если произошел какой либо непредвиденный сбой в начале операции.
Опишите, пожалуйста, ваше предложение подробнее
См жизненный цикл multiwindow https://developer.android.com/guide/topics/ui/multi-window.html?hl=ru
Фреймворк не будет лагать в таком режиме. Просто UI задачи предназанченные для специфичной Activity будут выполняться только тогда, когда Activity будет реально актинвной. ИМХО случай довольно редкий, к тому же не вызовет ошибок. Помечу, эту особенность в Javadoc-е
Почему?
2) Где вы нашли статическое поле?
Я вызываю setCurrentActivity в событии onResume. Каким образом их будет несколько?
Я вызываю setCurrentActivity(null) на каждом onPause
Каким образом утечет память? См https://developer.android.com/guide/components/activities/activity-lifecycle.html
Почему?
Моя задача, реализация процесса регистрации:
1) Получаю от пользователя первую порцию данных
2) Выполняю шаг регистрации 1. Последовательно отправляется N различных запросов. Тут я хочу показывать пользователю, что именно сейчас программа делает
3) Получаю от пользователя вторую порцию данных
4) Выполняю шаг регистрации 2. Последовательно отправляется M различных запросов. Тут я хочу показывать пользователю, что именно сейчас программа делает
Как я должен это сделать при помощи сервисов?
У фреймворка есть возможность запускать задачи UI при выполнении предусловий см https://mkabramyan.github.io/Asmyk/net/mabramyan/asmyk/core/AsmykUITask.html
Например вы можете выполнить какое либо UI задание из фоновой задачи/сервиса под конкретную Activity или при каких либо специфичных условиях (одно ограничение, проверка должна быть относительно быстрой).
Предусловия описываются в методе isApplicatble()
Запустить задачу вы можете вызвав метод runUITask экземпляра класса AsmykApplicationContext.
Если вы укажете параметр postpone=true, тогда задача будет выполнена если isApplicatble вернет true.
Если isApplicable вернет false задача будет отложена. Как только сменится текущая Activity проверка isApplicatble будет вызвана снова и так до тех пор пока isApplicatble не вернет true. Это позволяет однозначно выполнить специфичную UI задачу из фоновой операции.
Спасибо за вопрос, надеюсь у меня получилось описать понятно
Опишите, пожалуйста, ваше предложение подробнее