Android活动生命周期和locking/解锁设备

我刚刚发现,当设备启用锁屏时,会发生以下情况。 对于此活动,在清单中设置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被执行。 当我locking和解锁设备时,会发生一些奇怪的事情吗? 我突然与活动生命周期混淆..任何人都可以澄清这一点?

附上代码和日志消息

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活动生命周期和locking/解锁设备"

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

为了避免活动重新创build的情况,您可以使用android:configChanges =“orientation”属性通过android清单文件在活动级别处理configuration更改。