[Android] Activity 生命周期 OnStart&OnResume OnPause&OnStop 具体区别

时间:2022-03-31 23:42:56

【背景介绍】

看Android生命周期的同学都应该知道,OnCreate是Activity第一次创建的时候进入,OnStart是Activity可见的时候进入,

OnResume是Activity与用户可交互的时候进入。对应的,OnPause是Activity不可交互的时候进入,OnStop是Activity不可见

的时候进入,OnDetroy与OnCreate对应,是Activity销毁的时候进入。OnCreate和OnDestroy比较好理解,但是OnStart和

OnResume的区别,以及OnPause和OnStop的区别一直没有特别理解。刚好最近看到一份基础说明中有个实例介绍,这里

就引用一下,当做强化记忆。


【原理分析】

要区分OnPause 和 OnStop (OnStart和OnResume类似),主要就是要搞清楚什么情况是属于Activity的不可见状态,

什么时候处于Activity的不可交互状态。最好有一个例子能说明,ActivityA 启动ActivityB后,ActivityA不可交互,但是可见。

这样就能具体解释OnPause和OnStop两种状态了。

要实现上面提到的“ActivityA 启动ActivityB后,ActivityA不可交互,但是可见”这个效果,就需要用到DialogActivity这类

Activity。要实现一个DialogActivity,只需要在manifest文件中定义activity的属性:

<activity android:name=".SecondActivity"
android:theme="@android:style/Theme.Dialog">
</activity>


【验证步骤】

1. 启动MainActivity,观看对应的生命周期回调情况:

    [Android] Activity 生命周期 OnStart&OnResume OnPause&OnStop 具体区别
2. 点击MainActivity中的Btn 启动第二个Activity,对应的回调

    [Android] Activity 生命周期 OnStart&OnResume OnPause&OnStop 具体区别

    这里,需要注意,启动完第二个Activity后,首先调用MainActivity的OnPause,代表MainActivity不可交互了,

            然后依次调用SecondActivity的OnCreate,OnStart,OnResume.就结束了。它并没有再调用MainActivity的

    OnStop函数。让我们看下启动SecondActivity后的效果

      [Android] Activity 生命周期 OnStart&OnResume OnPause&OnStop 具体区别

        从GIF动土上可以看出,在启动SecondActivity后,MainActivity处于SecondActivity后面,

           虽然此时不可以点击操作MainActivity,但是可以看到。因此,调用的回调就只有MainActivity

  的OnPause,而没有OnStop。

3. 点击屏幕其他区域,使得SecondActivity消失,此时的生命周期回调

[Android] Activity 生命周期 OnStart&OnResume OnPause&OnStop 具体区别

可以看出,首先SecondActivy的OnPause(不可交互),MainActivity的OnResume(可交互),

SecondActivity的OnStop(不可见)和OnDestroy(销毁)。并没有调用MainActivity的OnStart,

因为MainActivity一直处于可见状态。


【总结】

Activity生命周期过程中的OnStart(代表Activity可见)  OnResume(代表Activity可交互操作)。可以

设计一个DialogActivty该在一个Activty上方,出现可见但是不可操作的场景,从而对OnStart和OnResume

之间的区别理解的更深入一些。