Android Activity жизненный цикл и блокировка / разблокировка устройства
Я только что обнаружил, что когда на устройстве включен экран блокировки, происходит следующее. Для этого действия в манифесте задано android:screenOrientation="landscape". Затем я выполняю следующие действия с моим телефоном в портретном режиме.
- Пользователь открывает активность.
- onCreated () вызывается
- onStart() вызывается
- onResume() вызывается
- Пользователь LOCKS устройство 4.5 onPause вызывается ()
- onDestroy() вызывается
- onCreate() вызывается
- onStart() вызывается
- onResume() называется 8.5 onPause вызывается ()
- Пользователь ОТКРЫВАЕТ устройство
- onResume() вызывается
- onDestroy() вызывается
- onCreate() вызывается
- onStart() вызывается
- 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".