Какие методы вызываются в жизненном цикле активности в следующих случаях: - PullRequest
15 голосов
/ 16 февраля 2011

Допустим, у меня есть приложение Hello World для одного занятия. Я запускаю это приложение.

Какие методы вызываются в каждом случае:

  • Нажата кнопка «Домой»:?
    Нажата кнопка «Назад»:?
    Телефонный звонок получен:?

Какие методы вызываются, когда пользователь снова запускает приложение с помощью значка приложения (при условии, что в ОС не было «другим приложениям требуется состояние памяти»):

  • Была нажата кнопка «Домой»:?
    Нажата кнопка «Назад»:?
    Был получен телефонный звонок:?

Спасибо всем.

Редактировать: Дополнительный кредит: Как пользователь может вызвать onPause без вызова onStop?

Ответы [ 4 ]

25 голосов
/ 16 февраля 2011

нажатие кнопки «Домой» и получение вызова не удаляют активность из стека задачи и будут доступны после повторного входа в приложение => onPause () => onStop ().

как показывает диаграмма жизненного цикла активности , повторный ввод вызовов приложения => onRestart () => onStart () => onResume ()

нажатие кнопки «назад» вместо этого убивает действие => onPause () => onStop () => onDestroy ()

повторный вход в приложение в этом случае вызывает classics => onCreate () => onStart () => onResume ()

EDIT

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

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

21 голосов
/ 20 июня 2016

Для понимания ЖИЗНЬ ДЕЯТЕЛЬНОСТИ Я создаю демо-версию См. ЗДЕСЬ

И другой пример, который я добавил.

MainActivity.java

    public class MainActivity extends AppCompatActivity {

    private static final String TAG = "State changed";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.i(TAG, "onCreate: ");
    }

    public void OpenDialog(View view) {

        final AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); //Read Update
        alertDialog.setTitle("hi");
        alertDialog.setMessage("this is my app");

        alertDialog.setButton("Continue..", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                // here you can add functions
                alertDialog.dismiss();
            }
        });

        alertDialog.show();  //<-- Show dialog
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "onStart: " );
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.i(TAG, "onResume: ");

    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.i(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "onRestart: ");
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i(TAG, "onSaveInstanceState: ");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG, "onRestoreInstanceState: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "onDestroy: ");
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        Log.i(TAG, "onBackPressed: ");
    }

}

Тематическое исследование

Случай 1 = Сначала щелкните значок приложения

Примечание: здесь не отображается onRestoreInstanceState, потому что он выполняется во время выполнения

I / State изменилось: onCreate:

I / Состояние изменено: при запуске:

I / Состояние изменено: onResume:

Случай 2 = Нажмите кнопку «Домой» (то же самое происходит, когда экран выключен или идет вызов)

I / состояние изменено: onPause:

Состояние ввода-вывода изменено: onSaveInstanceState:

I / Состояние изменено: onStop:

Дело 3 = (дело 2 продолжается) Открыть приложение с помощью недавнего

I / Состояние изменено: onRestart:

I / состояние изменилось: onStart:

I / Состояние изменено: onResume:

Случай 4 = Нажать кнопку «Назад» (вызов метода onBackPressed)

I / Состояние изменено: onPause:

I / Состояние изменено: onStop:

Я / Состояние изменено: onDestroy:

Случай 5 = Изменение конфигурации (поворот экрана)

I / Состояние изменено: onPause:

Состояние ввода-вывода изменено: onSaveInstanceState:

I / Состояние изменено: onStop:

I / Состояние изменено: onDestroy:

I / State изменилось: onCreate:

I / состояние изменилось: при запуске:

Состояние ввода-вывода изменено: onRestoreInstanceState:

I / Состояние изменено: onResume:

4 голосов
/ 16 февраля 2011

Видите ли, хотя с вашей программой hello world может произойти последовательность событий, такая же последовательность может не произойти, например, в видеоигре, поскольку Android, вероятно, уничтожит ее из-за того, что она потребляет слишком много ресурсов.

Лучший способ увидеть жизненный цикл моего приложения - переопределить все методы (onStart, onRestart, ..., включая onSaveInstance и onRestoreInstance) и вставить операторы журнала в каждый из них.Вот так:

@Override
public void onDestroy() {
    // Call the super class 
    super.onDestroy();
    // Log the action
    Log.d("Debug", "onDestroy() has been called!");
}

Теперь я могу зайти в logcat и посмотреть, какие события произошли.

1 голос
/ 25 января 2019

Может быть несколько сценариев

  1. Открытие приложения из значка приложения. следующие методы называются

    OnCreate () -> OnStart () -> onResume ()

  2. Когда пользователь нажимает кнопку возврата

    OnPause () -> OnStop ()

  3. Когда пользователь возвращается в приложение из стека активности

    onRestart () -> onStart () -> onResume ()

  4. Когда приложение работает и пользователь нажимает кнопку питания

    OnPause () -> OnStop ()

  5. Когда пользователь разблокирует телефон

    onRestart () -> onStart () -> onResume ()

  6. Когда пользователь получает входящий звонок, пока вы находитесь в приложении

    OnPause ()

  7. Когда пользователь возвращается в приложение после отключения телефонного звонка

    onResume ()

  8. Когда пользователь нажимает кнопку возврата из приложения

    OnPause () -> OnStop () -> OnDestroy ()

  9. И когда пользователь нажимает кнопку «Домой» и из стека операций пользователь проводит пальцем, метод app.onDestroy () может вызываться или не вызываться в зависимости от того, содержит ли ОС контекст операции или нет, в соответствии с требованиями к памяти.
...