Android activity生命周期一

本系列文章一共三篇,第一张讲activity正常生命周期,第二篇讲activity异常的生命周期

正常情况activity的生命周期

一共有七个生命周期方法,直接插入代码

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    protected void onRestart() {
        super.onRestart();
    }

1,首先 oncreate方法,一个activity对象(注意是一个对象,不是一个类的对象)的oncreate 方法和只会走一次,当activity创建的时候oncreate 方法会被回调

这个方法去加载布局文件,可以设置主题样式等等,我们开发可以把view的绑定以及view事件设置,在这个方法中完成

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        setEvent();
    }


    private void initView() {
    }

    private void setEvent() {
    }

(个人写法,也可以写在一个方法当中)。

2,当oncreate方法执行完之后 onstart方法会被回调到,当前activity 已经可见了,但是还没有获取焦点,我们并不能和它进行交互,onstart方法在一个activity对象的生命周期中可能会被调用多次,只要是当activity从后台往前台显示的时候就回调此方法,例如两个activity之间切换的时候

3,onresume当activity 调用了onstart方法之后activity虽然可见但是不能交互,马上接下来就回调onresume,这个时候当前activity对象就已经正常显示,并且可以交互了。

4,onPause方法被回调,activity失去焦点,但是任然可见,这个方法中我们可以做一下简单的资源释放,但是不能耗时,

5,onstop方法被回调,此时activity对象已经不可见,也可以在此方法中释放一些简单的资源,记住不能耗时

6,ondestroy方法被回调,然后activity被销毁,此方法我们主要做的就是释放资源,相对于前两个这个需要把所有的资源释放,

如果不释放可能会造成内存泄漏,所以这个方法当中主要的作用也就是释放资源文件,(简单说一下内存泄漏的原因,当activity要被销毁之前,首先会把当前activity对象从整个activity回退栈中移除它的引用,但是activity对象还存留在内存当中,这个时候才会调用ondestroy方法 ,如果你在方法中没有释放资源,其他还有一些生命周期和app一样长的对象,例如单例,静态,等,持有着当前activity对象,就会导致gc的时候不能够及时回收,activity中的所有对象分配的内存就不能及时回收,导致内存泄漏,当你频繁启动这个activity的时候就会导致应用可用的内存越来越少,最后oom)

7onrestart ,当activity对象从不可见变为可见一般都会回调这个方法,大多数因为用户操作导致,当用户打开一个activity之后,按了home键,在返回当前页面的时候就不会从新创建对象,所以不会走oncreate对象,onrestart方法会被回调

简单介绍一下方法的作用和实际触发的效果

下面说一下生命周期的场景,

场景一

启动一个activity 然后按返回键

oncreate ,onstart,onresume,onpause,onstop,ondestroy

场景二

启动一个activity 然后按Home键,在返回应用

oncreate ,onstart,onresume,onpause,onstop,onrestart,onstart,onresume

场景三 

启动一个activityA  在A上启动一个不透明的activityB

A:oncreate ,A:onstart,A:onresume,A:onpause,B:oncreate ,B:onstart,B:onresume,A:onstop

场景四 

启动一个activityA  在A上启动一个不透明的activityB

A:oncreate ,A:onstart,A:onresume,A:onpause,B:oncreate ,B:onstart,B:onresume



猜你喜欢

转载自blog.csdn.net/qq_37488573/article/details/80866114