Понимание жизненного цикла активности Android

У меня проблема с жизненным циклом моей активности Android. Когда я нажимаю кнопку «домой», вызывается функция onDestroy(). У меня есть тест с простым приветствием мира и функцией обратного вызова Toast.

Мой код:

    public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(), "onCreate", Toast.LENGTH_SHORT).show();
}

    @Override
    protected void onRestart(){
        super.onRestart();
Toast.makeText(getApplicationContext(), "onRestart", Toast.LENGTH_SHORT).show();
    }

    @Override 
    protected void onStart(){
        super.onStart();
Toast.makeText(getApplicationContext(), "onStart", Toast.LENGTH_SHORT).show();
    }

    @Override 
    protected void onResume(){
        super.onResume();
Toast.makeText(getApplicationContext(), "onResume", Toast.LENGTH_SHORT).show();
    }
    @Override 
    protected void onStop(){
        super.onStop();
        Toast.makeText(getApplicationContext(), "onStop", Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy(){
    super.onDestroy();
Toast.makeText(getApplicationContext(), "onDestroy", Toast.LENGTH_SHORT).show();
}
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

РЕДАКТИРОВАТЬ: Когда я запускаю свое приложение, у меня появляется всплывающее уведомление «onCreate», «onState», затем «onResume». Если я нажимаю кнопку «домой», я вижу всплывающее уведомление «onStop». " и "onResume". Но когда я запускаю свое приложение на своем реальном устройстве (Samsung GT-P3110), у меня появляется тост "onCreate", "onState", затем "onResume. Если я нажму кнопку «домой», я увижу тост «onStop» и «onDestroy». (Мое приложение всегда отображается в списке запущенных приложений). Если я вернусь к приложению, оно увидит «onCreate» -> onState» -> «onResume», как будто оно полностью перезапущено.

Я не понимаю. Можете ли вы просветить меня, пожалуйста?


person helene    schedule 21.10.2013    source источник
comment
Возможный дубликат stackoverflow.com/a/8516056/562840   -  person Mikel    schedule 21.10.2013


Ответы (3)


Активность представляет собой экран, который вы видите на своем телефоне, когда приложение запущено. Если этот экран исчез, ваша активность уничтожается.

см. этот учебник для информации:

http://developer.android.com/training/basics/activity-lifecycle/starting.html

вы можете прочитать больше об этом и запустить пример apk активности, это поможет вам понять, как это работает. (нажмите «Загрузить демоверсию» и запустите ее где-нибудь, на виртуальной машине или на своем телефоне)

person amirelouti    schedule 21.10.2013
comment
Спасибо за ваш ответ. Я понял onDestroyed, когда активность Destroy. Но моя проблема заключается в следующем: в некоторых случаях действие будет перемещаться только частично вниз по пирамиде и ждать (например, когда пользователь переключается на другое приложение), после чего действие может вернуться наверх (если пользователь возвращается к действию) и возобновить работу с того места, на котором остановился пользователь. В моем случае, если я переключаюсь на другое приложение, мое приложение вызывает onDestroy. Я проверил на виртуальном устройстве, у меня хорошее поведение. Проблема только для моего реального устройства (вкладка Samsung Galaxy GT-P3110). - person helene; 22.10.2013
comment
это может быть связано с различиями между версиями вашего AVD и реальной вещью, или конфигурациями, как я сам знаю, ondestroy должен вызываться в любом случае, возможно, Samsung изменил что-то в своем программном обеспечении, в любом случае, если вы хотите восстановить свое приложение, как вы оставили В последний раз вы можете реализовать onSaveInstanceState() для сохранения ваших данных и onRestoreInstanceState() для их восстановления при повторном создании приложения. - person amirelouti; 22.10.2013
comment
ХОРОШО. Спасибо за ваш ответ - person helene; 22.10.2013
comment
На самом деле моя проблема была в параметре. Флажок удаляет каждое действие при выходе пользователя (в параметрах разработки) - person helene; 24.10.2013

Ваша активность фактически уничтожается, когда она останавливается, выдержка из здесь:

Примечание. Система вызывает onDestroy() после того, как она уже вызвала onPause() и onStop() во всех ситуациях, кроме одной:

«кроме одного» в этом случае не относится к вам, и это только тогда, когда finish () вызывается из метода onCreate (). Остальная часть выдержки находится в нижней части страницы, указанной выше.

person Samuel    schedule 21.10.2013

В дополнение к комментариям ниже, вы можете сделать различие между кнопкой BACK и HOME с помощью метода:

void onSaveInstanceState(Bundle outState)

вызывается, когда вы нажимаете кнопку HOME, но не кнопку BACK.

person Andros    schedule 21.10.2013