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

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

  1. Пользователь открывает активность.
  2. onCreated () вызывается
  3. onStart() вызывается
  4. onResume() вызывается
  5. Пользователь LOCKS устройство 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

2 ответа

Решение

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

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

Другие вопросы по тегам