2016-02-19 2 views
5

Я пытаюсь найти официальную документацию о жизненном цикле класса AndroidApplication. По-видимому, для того, что я нашел в StackOverflow here и here, класс Application может быть убит, если системе нужна память. Даже this учебник говорит так.Документация по жизненному циклу приложения Application Application

Но кое-что раздражает меня немного об этом:

  • Я не могу найти официальную документацию, говоря мне, что да, Application класс может быть убит на низкой памяти.
  • Я не могу найти какую-либо официальную диаграмму, представляющую жизненный цикл Application.
  • Я не могу найти правильный ответ для использования, если убит класс Application, за исключением onLowMemory(). Означает ли это, что я должен использовать этот метод для сохранения моих данных?
  • Если класс Application был убит при низком давлении памяти, и приложение снова появляется на переднем плане, как я могу узнать в его onCreate(), что приложение было воссоздано после сбоя системы? В Activity я бы проверил savedInstanceState, но насколько я знаю, в классе Application нет ничего подобного.

Благодарим вас за просвещение.

+0

как насчет 'onTrimMemory'? – pskink

+0

Вы видели http://stackoverflow.com/questions/8515936/android-activity-life-cycle-what-are-all-these-methods-for? –

+0

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle –

ответ

4

Я не могу найти официальную документацию, сообщающую мне, что да, класс приложения может быть убит при низкой памяти.

Ниже приведен ссылки на там, где это было сказано:

Я не могу найти какую-либо официальную схему, представляющую приложению жизненный цикл нет.

Это разумное замечание ... Хотя следующее мнение на основе, моя догадка, что такая схема будет противоречить многозадачности «философии» андроида, как описано в последней ссылке, предоставленной:

«Ключ к тому, как Android обрабатывает приложения таким образом, заключается в том, что процессы не закрываются чисто. Когда пользователь покидает приложение, его процесс поддерживается в фоновом режиме, что позволяет ему продолжать работать (например, загружать веб-страницы) если это необходимо, и сразу же выходите на передний план, если пользователь вернется к нему. Если на устройстве никогда не хватает памяти, тогда Android будет поддерживать все эти процессы, действительно оставив все приложения «ru» «все время».

Я не могу найти надлежащий обратный вызов для использования, когда класс Application убит освобожденный onLowMemory(). Означает ли это, что я должен использовать этот метод для сохранения моих данных?

Относительно onLowMemory(), описание которого довольно проста, мы говорим о фоновом процессе или на переднем плане пользовательского интерфейса? ...

Если ни один из приложения Activities не находится на переднем плане и OS мало памяти, это может убить приложение, так что ни один из вызывающих обратных вызовов Application или компонентов приложения (Activity, Service) не будет вызван. Тем не менее, (поскольку вы имеете дело с Activities), я рекомендую хранить все постоянные данные в соответствии с документацией в onPause().

Если класс Application убит при низком давлении памяти и приложение приходит снова на передний план, как я могу знать его onCreate(), что приложение было воссоздано после системы убить?

Вы не можете найти это в Application 's onCreate().

+0

, когда приложение выходит на передний план после того, как его процесс был закрыт, будет ли вызываться метод 'onCreate' класса приложения до запуска' onCreate' метода запуска/основного действия? –

+1

@ the beest Конечно, сначала создается экземпляр 'Application', затем создаются другие компоненты приложения (' Activities', 'Services'). – Onik

1

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

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

Общая идея заключается в том, что вам не важно, было ли приложение убито или нет. Если это так, ОС перезапустит приложение в следующий раз, когда это необходимо, иначе оно будет возобновлено (и для этого вы будете использовать события жизненного цикла Activity/Fragment).

Какие данные необходимы для хранения - возможно ли сохранить его раньше (когда он получен из веб-сервиса и т. Д.) Вместо того, чтобы ждать последнего момента?

+0

Я использую для хранения своих синглтонов, которые должны сохранять свою ссылку во всех моих действиях. Некоторые из них не являются «Parcelable» и не могут быть преобразованы в него.Я знаю, что я не могу полагаться на 'onTerminated', но то, что раздражает отсутствие официальной документации о жизненном цикле' Application' –

+0

Если ваше приложение убито, все синглтоны будут скрыты. Разве вы не можете воссоздать их в следующий раз, когда они понадобятся? В качестве альтернативы вы можете попробовать Кинжал (http://google.github.io/dagger/) и вставлять синглтоны туда, где они вам нужны (вы можете отметить их как одиночные игры, чтобы Кинжал удостоверился, что используется один экземпляр) , –

+0

Да, я знаю, что они будут одеты, я хочу знать, почему это так (из официальных источников). И нет, я не смогу получить их после того, как их выкопали. Использование кинжала еще не является для меня решением, так как это просто вопрос обхода проблемы. Плюс, мне будет сложно с новым компилятором Джек и кинжалом. –

Смежные вопросы