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

34

我发现当设备启用锁屏时,以下情况会发生。在清单文件中设置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

尝试了各种选项,已经挣扎了两天。 - suku
2个回答

54
在手机上(或锁定方向为竖屏的平板电脑上),锁屏只支持竖屏模式。因此,当设备被锁定时,设备会自动切换到竖屏模式(导致 6、7、8 和 9)。当设备解锁时,onResume() 会被调用,因为您的Activity 正在显示,但是您又从竖屏转移到了横屏,所以 Activity 在横屏中被销毁并重新创建。

很好的解释。 - Vicky
讲解得非常清晰。仅在横屏模式下锁定/解锁时重新创建活动。 - AnujDeo
1
好的,为了满足锁屏要求(仅支持竖屏),活动被重新创建了,但为什么活动最终在onResume状态下运行? - StayCool

5
为了克服活动重新创建的情况,您可以使用Android清单文件中的android:configChanges="orientation"属性来处理活动级别的配置更改。

当我移除了android:configChanges="orientation",它完美地按预期工作了。 - Ahmad Dwaik 'Warlock'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接