Жизненный цикл Android Activity и блокировка / разблокировка устройства

Я только что обнаружил, что когда на устройстве включен экран блокировки, происходит следующее. Для этого действия в манифесте установлено android: screenOrientation = "landscape". Затем я выполняю следующие действия со своим телефоном в портретном режиме.

  1. Пользователь открывает действие.
  2. onCreated () называется
  3. onStart () называется
  4. onResume () называется
  5. Пользователь БЛОКИРУЕТ устройство 4.5 вызывается onPause ()
  6. onDestroy () называется
  7. onCreate () вызывается
  8. onStart () называется
  9. onResume () вызывается 8.5 onPause вызывается ()
  10. Пользователь РАЗБЛОКИРУЕТ устройство
  11. onResume () называется
  12. onDestroy () называется
  13. onCreate () вызывается
  14. onStart () называется
  15. onResume () вызывается.

Ладно, я не понимаю, почему после выключения экрана выполняются 6,7,8 .. Также я не понимаю, почему выполняются 11, 12, 13, 14. Бывают ли странные вещи, когда я блокирую и разблокирую устройство? Меня вдруг смущает жизненный цикл деятельности .. Может кто это прояснить?

Прикрепите код и сообщение журнала

package com.example.wf;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("log", "oncreate");   
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("log", "onresume");
    };

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("log", "onstart");
    };

    @Override
    protected void onPause() {
        super.onStart();
        Log.d("log", "onpause");
    };

    @Override
    protected void onDestroy() {
        Log.d("log", "ondestroy");      
        super.onDestroy();
    };
}

Журнал сообщений

10-05 23:11:07.994: D/log(23810): oncreate
10-05 23:11:07.994: D/log(23810): onstart
10-05 23:11:07.994: D/log(23810): onresume
// LOCK DEVICE
10-05 23:11:19.957: D/log(23810): ondestroy
10-05 23:11:20.007: D/log(23810): oncreate
10-05 23:11:20.007: D/log(23810): onstart
10-05 23:11:20.007: D/log(23810): onresume
// UNLOCK DEVICE
10-05 23:11:57.407: D/log(23810): onresume
10-05 23:11:57.537: D/log(23810): ondestroy
10-05 23:11:57.587: D/log(23810): oncreate
10-05 23:11:57.587: D/log(23810): onstart
10-05 23:11:57.587: D/log(23810): onresume

person user2062024    schedule 06.10.2013    source источник
comment
Борюсь с этим уже 2 дня, пробуя разные варианты   -  person suku    schedule 19.05.2016


Ответы (2)


На телефонах (или планшетах с заблокированной книжной ориентацией) экран блокировки только портретный. Поэтому, когда устройство заблокировано, оно автоматически переключается в портретный режим (вызывая 6, 7, 8 и 9). Когда устройство разблокировано, вызывается onResume(), так как ваш Activity становится видимым, но вы снова переключаетесь между портретной ориентацией и теперь заблокированы в альбомной ориентации, поэтому действие уничтожается и воссоздается в альбомной ориентации.

person ianhanniballake    schedule 06.10.2013
comment
хорошее объяснение. - person Vicky; 18.01.2017
comment
Прекрасно объяснено. Действие воссоздается при блокировке / разблокировке, только если оно находится в ландшафтном режиме. - person AnujDeo; 10.10.2017
comment
Хорошо, действие воссоздается в соответствии с требованиями экрана блокировки (только портретная ориентация), но почему действие в конечном итоге выполняется в состоянии onResume? - person StayCool; 28.12.2020

Чтобы избежать сценария повторного создания активности, вы можете обрабатывать изменения конфигурации на уровне активности с помощью файла манифеста Android, используя атрибут android: configChanges = "direction".

person mohit anand    schedule 17.02.2016
comment
для меня, когда я удалил android: configChanges = Ориентация, он работал отлично, как и хотелось - person Ahmad Dwaik 'Warlock'; 10.09.2018