Подтвердить что ты не робот

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

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

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

  • Нажимается кнопка "Домой":? Нажмите кнопку "Назад":?
    Получен телефонный звонок:?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

ИЗМЕНИТЬ

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

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

Ответ 2

Для понимания ДЕЯТЕЛЬНОСТЬ LIFECYCLE я создаю демонстрацию. Смотрите ЗДЕСЬ

И другое тематическое исследование я добавил.

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/State изменено: onStart:

I/State изменено: onResume:

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

I/State изменено: onPause:

I/State изменено: onSaveInstanceState:

I/State изменено: onStop:

Случай 3 = (случай 2 продолжается) Открыть приложение через последние

I/State изменено: onRestart:

I/State изменено: onStart:

I/State изменено: onResume:

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

I/State изменено: onPause:

I/State изменено: onStop:

I/State изменено: onDestroy:

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

I/State изменено: onPause:

I/State изменено: onSaveInstanceState:

I/State изменено: onStop:

I/State изменено: onDestroy:

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

I/State изменено: onStart:

I/State изменено: onRestoreInstanceState:

I/State изменено: onResume:

Ответ 3

Хорошо, если в вашей программе приветствия будет происходить последовательность событий, такая же последовательность может не произойти, например, в видеоигре, потому что 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 и посмотреть, какие события имели место.

Ответ 4

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

  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() может вызываться или не вызываться в зависимости от того, содержит ли ОС контекст действия или нет, в соответствии с требованиями к памяти.