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 

Solutions Collecting From Web of "Android Activity生命周期和锁定/解锁设备"

在手机(或方向锁定肖像的平板电脑)上,锁定屏幕仅为纵向。 因此,当设备锁定时,设备会自动切换到纵向模式(导致6,7,8和9)。 当设备解锁时,当您的Activity变得可见时调用onResume() ,但是您再次在纵向之间转换并且现在已锁定在横向中,因此活动将被破坏并在横向中重新创建。

为了完成活动重新创建场景,您可以使用android:configChanges =“orientation”属性通过android清单文件处理活动级别的配置更改。