На очередном витке эволюции в приложении AP0003 в Активности D добавлена кнопка запуска Активности B из приложения AP0004.
Запускаем приложение AP0004
Жмем кнопку Start D AP0003
Жмем кнопку Info
Тут все понятно в логах.
Жмем кнопку Start D AP0003
Видно что в сейчас в задаче с ID=23 две Активности. Жмем Info
И еще раз внимательно смотрим. В задаче приложения AP0004 сейчас две активности А и D. Активность А принадлежит приложению AP0004, Активность D – AP0003. И обе они находятся в одной задаче TaskID=23, приложения AP0004. Но при этом Активность А работает в процессе приложения AP0004 (PID 1685), а Активность D в процессе приложения AP0003 (PID 1737).
Теперь жмем кнопку Start B AP0004
Теперь в нашей задаче ТРИ Активности A-D-B, причем Активности А и В из приложения AP0004, а активность D из приложения AP0003.
Жмем Info
Видим, что после запуска Активности В из приложения AP0004, мы опять переключились на процесс этого приложения (PID 1685), при том что находимся все в той же задаче.
От сюда вывод, что каждая Активность, по умолчанию, работает в процессе своего приложения, хотя и может находится при этом в разных задачах других приложений.
Теперь, ради спортивного научного интереса, убьем процесс приложения AP0003 (PID 1737).
Жмем кнопку HOME
И запускаем приложение ProcessView. В Google Play оно называется CPU Usage& Process List Viewer.
Как видим процесса приложения AP0003 (PID 1737) больше нет. Мы его убили.
Теперь возвращаемся к нашему приложению AP0004.
Напомню что в нашей задаче сейчас ТРИ Активности A-D-B, причем Активности А и В принадлежат приложению AP0004 (PID 1685), а Активность D, принадлежит приложению AP0003 (PID 1737), процесс которого мы как раз только что и убили.
Теперь посмотрим что будет если мы нажмем кнопку ОБРАТНО, находясь в Активности В. По идее должна открыться Активность D, но ее же процесс мы только что убили….. та да да дамммм… жмем кнопку ОБРАТНО
Как видим, Активность D была создана заново, а счетчик, который у нас всегда работал безупречно сбился.
Жмем кнопку Info
Как видим в логах показывается достоверная информация о количестве Активностей в нашей задаче, их ДВЕ – А и D. Но Активность D уже работает в процессе с PID 1796, а до этого был PID 1737, но мы его убили. Но хотя мы его убили, Активность D все равно была запущена в процессе приложения AP0003 хоть и новом конечно.
Нажмем кнопку HOME и снова вернемся к приложению AP0004
Как видим счетчик в Активности D уже показывает правильное количество Активностей в задаче.
Из такого поведения можно сделать два вывода. Первый, что лучше не прибивать ни какие приложения многочисленными таск киллерами, так как мы не знаем как это приложение поведет себя и как это скажется на других приложениях.
Свои приложения надо стараться проектировать в расчете на то что их процесс может быть прибит пользователем или системой.
То есть тестировать свои приложения в стиле садо мазо
Продолжим и мы в том же стиле. Напечатаем текст в текстовом поле
И повернем экран, чтобы убедится что текст сохранился
Повернем обратно и нажмем Start B AP0004
Нажмем кнопку ОБРАТНО
Как видим в нормальной ситуации, счетчик работает нормально.
Нажмем еще раз Info
Как видим Активность D сейчас у нас снова на вершине стека в задаче приложения AP0004 с TaskID 23 и работает в процессе приложения AP0003 с PID 1769.
Снова нажмем Start B AP0004 и смотрим лог.
Активность B была запущена в процессе приложения AP0004 PID 1685. Теперь снова убьем процесс приложения AP0003 PID 1769, и посмотрим, отразится ли это как то в логах.
А в логах….. И тишина… и только мертвые с косами стоят…..
То есть, если убивается процесс, то у Активностей в нем даже не срабатывают методы onStop() и onDestroy(). Это тоже надо учитывать при разработке приложений.
Вернемся опять в наше приложение
И увидим, что счетчик в приложении показывает что у нас в задаче 3 активности. Нажмем кнопку Info
И логи нам тоже показывают что в задаче три Активности, что и есть правда. Ну логически. Так как наше приложение помнит что между Активностями А и В есть Активность D. То есть задача с TaskID 23, помнит и знает об этом. Другое дело, что она не знает, что процесс 1769 был прибит нами.
Для чистоты эксперимента нажмем кнопку Start Activity C
И так видим что сейчас в задаче четыре Активности А-D-B-C, из них только Активность D принадлежит приложению AP0003, остальные принадлежат AP0004.
Нажмем два раза кнопку обратно.
Как видим, хотя Активность и была создана снова, но текст в ней сохранился, так как он был вытащен из объекта Bundl принадлежащему задаче приложения AP0004 с Task ID 23.
Единственное, что не правильно работает, так это счетчик, который рассчитан был на нормальную работу приложения.
Если будет время и желание попробую поправить это.
А щас пока нажмем кнопку Info
В логах показывается все правильно. Количество Активностей в задаче 2.
На этом пока на сегодня все.
Комментариев нет:
Отправить комментарий