почему андроид "оживляет" сбойные приложения? - PullRequest
6 голосов
/ 08 декабря 2010

если у вас есть приложение для Android с более чем одним действием, и действие A запускает B, поэтому, если действие b завершается сбоем, процесс завершается, но восстанавливается ОС Android и запускает действие A снова, а не просто закрывает приложение,почему?

1 Ответ

4 голосов
/ 08 декабря 2010

Вы жалуетесь на то, что Android попытается корректно восстановить состояние вашего приложения после сбоя? ;)

Это результат управления ресурсами Android и жизненного цикла Activity на работе. Помните, что одна задача может состоять из нескольких действий, которые могут охватывать несколько процессов или приложений. Как указано здесь: http://android -developers.blogspot.com / 2010/04 / multitasking-android-way.html Процессы Android не закрываются «чисто» в традиционном смысле * nix. Компоненты вашего приложения получают события жизненного цикла, но после определенного момента приложение может быть уничтожено без дальнейшего предупреждения, чтобы система могла вернуть свои ресурсы.

Например, пользователь может просматривать веб-страницы, щелкнуть ссылку на YouTube, запускающую приложение YouTube, а затем нажать кнопку «Поделиться», чтобы запустить свое любимое приложение для социальных сетей и опубликовать ссылку на видео. Это все часть одной и той же задачи; если пользователь нажимает несколько раз, он вернется на страницу браузера, с которой он начал.

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

Но эта же последовательность событий, восстанавливающая предыдущее состояние «Активность», может происходить даже в одном приложении в одном и том же процессе. В вашем сценарии действие B закрыто в результате сбоя. Таким образом, система делает именно то, что всегда делает - она ​​возвращается к предыдущему действию: действию А. Но процесс действия А еще не завершен (он аварийно завершился!), Поэтому система перезапускает его и может восстановить свое предыдущее состояние.

...