33

我刚刚发现当设备启用锁屏时,会发生以下情况。对于此活动,在清单中设置了 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() 被调用。

好吧,我不明白为什么屏幕熄灭后执行 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
4

2 回答 2

53

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

于 2013-10-06T04:22:42.467 回答
5

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

于 2016-02-17T07:59:48.930 回答