activity的生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了activity的生命周期相关的知识,希望对你有一定的参考价值。

在看了网上的资料后,activity的生命周期也有了大致的理解,以下是官网的activity的生命周期图。

技术分享

这张图列出了activity生命周期中的主要方法,正常的流程是:

onCreate-->onStart-->onResume-->onPause-->onStop-->onDestory

这些方法表示的含义为:

onCreate:Activity的创建

onStart:Activity开始执行,但还未显示

onRestart:Activity重新开始执行

onResume:Activity处于运行状态

onPause:Activity暂停,但还处于可见状态

onStop:Activity停止,处于不可见状态

onDestory:Activity被销毁

 

在MainActivity中列出所有方法并打上标记,代码如下:

public class MainActivity extends Activity {

    private Button btn;
    private static final String TAG="ActivityDemo";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e(TAG, "onCreate");
    }
    
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        Log.e(TAG, "onStart");
    }
    
    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
        Log.e(TAG, "onRestart");
    }
    
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        Log.e(TAG, "onResume");
    }
    
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        Log.e(TAG, "onPause");
    }
    
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
        Log.e(TAG, "onStop");
    }
    
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e(TAG, "onDestroy");
    }
}

首次启动后,输出为

技术分享

可以看出,程序首次启动后,生命周期方法的执行顺序为:

onCreate-->onStart-->onResume

按下返回按钮后,输出为

技术分享

生命周期的执行顺序为:

onPause-->onStop-->onDestory

按下HOME键或者锁屏,输出为

技术分享

生命周期的执行顺序为:

onPause-->onStop

再次打开或者解锁屏幕(在当前Activity锁屏后解锁),输出为

技术分享

生命周期的执行顺序为:

onRestart-->onStart-->onResume

 

页面跳转生命周期的执行

跳转到dialog界面,使界面处于部分遮盖状态,但失去了焦点,如图

技术分享

 跳转到dialog界面的输出为

技术分享

生命周期的执行顺序为:

onPause

 

跳转到另一个Activity时,当前Activity被完全遮盖时,输出为

技术分享

生命周期的执行顺序为:

onPause-->onStop

 

其实Activity的生命周期大致可以分为如下几个过程:

1.启动activity到退出onCreate-->...-->onDestory

2.activity运行状态到失去焦点:onResume-->onPause

3.activity失去焦点到获得焦点:onPause-->onResume

4.activity运行状态到不可见:onResume-->onPause-->onStop

5.activity不可见到运行状态:onStop-->onRestart-->onStart-->onResume

6.处于onPause或者onStop状态的Activity被系统杀死后重新可见:系统依次调用:onCreate-->onStart-->onResume,进入运行状态

7.退出当前Activity:onResume-->onPause--onStop-->onDestory

以上是关于activity的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Activity横竖屏切换生命周期变化

activity生命周期分析(两个activity之间跳转的生命周期执行顺序)

如何从一个activity中跳转到一个fragment

vue keepalive 路由守卫 生命周期等问题

android学习记录 生命周期介绍和页面跳转

4.Flutter生命周期与路由管理