Android Activity生命周期和锁定/解锁设备

时间:2013-10-06 03:16:02

标签: android android-activity locking lifecycle unlock

我刚刚发现当设备启用锁定屏幕时,会发生以下情况。 对于此活动,在清单中设置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()被调用。
  16. 好吧,我不明白为什么在屏幕关闭后会执行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 个答案:

答案 0 :(得分:42)

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

答案 1 :(得分:2)

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