2014-02-01 5 views
4

При повторном запуске приложения класс onCreate класса приложения не вызывается. Первый раз вокруг. Это воспроизводимая с помощью Android Studio, чтобы создать новое приложение, а затем добавить минимальное одноплодной класс Application:Класс приложения Android не уничтожается при уничтожении последнего действия

package com.whatever.test; 
import android.app.Application; 
import android.content.Context; 
import android.util.Log; 

public class MyApp extends Application { 
    private static MyApp singleton; 

    public static MyApp getInstance(Context context) { 
     Log.i("MyApp","---------->getinstance"); 
     return singleton; 
    } 

    @Override 
    public void onCreate() 
    { 
     super.onCreate(); 
     singleton = this; 
     Log.i("MyApp","---------->act oncreate"); 
    } 
} 

и в своей деятельности, добавив в OnCreate:

MyApp myApp = MyApp.getInstance(this); 
Log.i("MainActivity", "-------->onCreate"); 

и OnDestroy:

@Override 
    public void onDestroy() 
    { 
     super.onDestroy(); 
     Log.i("MainActivity", "-->onDestroy"); 
    } 

manifest.xml содержит:

android:name=".MyApp" 

Я нажимаю кнопку «Назад» в действии и вижу, что вызываемый вызов включен, но этого, по-видимому, недостаточно, чтобы удалить класс приложения. Если я убью приложение с помощью диспетчера приложений телефона и снова запустил, я снова увижу журнал App onCreate (но всего за один прогон).

Не должен ли этот класс быть уничтожен при удалении последнего действия? Это мое предположение. Конечно, я читал людей, говорящих, что этот класс может быть уничтожен при запуске приложения, поэтому вам придется обрабатывать перезагрузку любого состояния во время жизненного цикла приложения, но ничего не отражает мой сценарий.

Примечание: Испытано на физическом телефоне (Galaxy S3)

ответ

5

Приложение может также услуги, контент-провайдеров, содержание наблюдателей и т.д. Таким образом, важно не связывать продолжительность жизни приложения к деятельности. Приложение может быть уничтожено, если оно скрыто, если ОС необходимо освободить ресурсы. Но в целом вы не можете делать никаких предположений о том, когда это произойдет.

Сохранение/перезагрузка состояния должно происходить в вашей деятельности onCreate и onDestroy. Единственная гарантия, которую вы имеете, когда ваша деятельность скрыта (например, с помощью кнопки «Назад»), вызывается Activity.onStop.

я рекомендую прочитать все о жизненном цикле активности: Activity class documentation

Edit: Чтобы получить ответ на свой вопрос, «Если это не класс (приложение) будет уничтожен, когда последняя активность удаляется? ». Ответ - нет. Единственный жизненный цикл, на который можно положительно рассчитывать, - это действие вашей деятельности. И даже в этом случае Activity.onDestroy не так надежен, как вы надеетесь. Нажатие кнопки «Назад» для скрытия активности будет гарантировать, что вызывается Activity.onStop. Класс Application не имеет метода onDestroy.

+0

Спасибо за ответ, но ваш ответ, похоже, сосредоточен на действиях, и мой вопрос касается класса приложения. –

+1

Я направляю вас к обсуждению Деяний, потому что ваше понимание приложений неверно. –

+0

@DaneWhite, пожалуйста, попробуйте еще несколько разработок по классу Application, чтобы мы могли получить больше контекста. –

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