Теперь уже поговорим о taskAffinity в разных вариантах применения этого параметра.
И так приложения AP0003 и АР0004 опять сильно мутировали.
В приложение АР0003 было добавлено три Активности: E, F и G.
Для Активности Е определены параметры:
taskAffinity="com.example.ap0004"
allowTaskReparenting="true"
Для Активности F определен параметр:
taskAffinity="com.example.ap0004"
Для Ативности G определен параметр:
allowTaskReparenting="true"
Так же в Активность А приложения АР0003 добавлены кнопки:
Start Activity E, Start Act F и Start Activity G – которые делают стандартный запуск соответствующих Активностей.
Start Activity F New Task – запускает Активность F с флагом FLAG_ACTIVITY_NEW_TASK.
В Активность С приложения АР0004 добавлена кнопка Start E AP003 (стандартный запуск).
И так рассмотрим сперва случай с примером приложения из статьи в альма-матер на эту тему.
Запускаем приложение AP0004
Запоминаем что ID нашей задачи равен 35.
Жмем Start G AP0003
Видим что Активность G приложения АР0003 была запущена в задаче 35. То есть стек задачи 35 сейчас содержит две Активности и имеет вид A-G.
Нажмем кнопку Info
Вводим текст в поле
Жмем кнопку HOME и запускаем приложение АР0003
И что мы видим!
Что называется найди десять различий! Во первых это уже задача 36. Во вторых мы видим что Активность уже была запущена и видим нашу надпись! То есть это тот же самый экземпляр Активности который раньше был в задаче 35. То есть он переместился из стека задачи 35 в стек задачи 36.
Посмотрим логи
Теперь нажмем кнопку Info
Мы видим что в стеке задачи 35 сейчас одна Активность А из которой мы собственно и запустили Активность G, которая перешла в стек задачи 36. А в стеке задачи 36 сейчас ДВЕ активности А и G. Но Активность А мы не запускали и ее запуска не видно ни где в логах, что кстати очень интересно.
Это означает что поскольку приложение АР0003 не было запущено и не было родного таска для Активности G, то этот таск создался и там виртуально присутствует корневая Активность А этого приложения.
Теперь нажмем кнопку ОБРАТНО
И вот она Активность А задачи 36. Но мы видим что она сообщает что она была запущена впервые! Смотрим логи
И мы действительно видим что Активность А была только что создана! Такое поведение приложений надо иметь в виду и учитывать при разработке.
Соответственно в задачах 35 и 36 сейчас по одной Активности А.
Больше пока ни чем в этом посте грузить не буду. Так как и тут есть на что помедитировать
Комментариев нет:
Отправить комментарий