【背景介绍】
看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,观看对应的生命周期回调情况:
2. 点击MainActivity中的Btn 启动第二个Activity,对应的回调
这里,需要注意,启动完第二个Activity后,首先调用MainActivity的OnPause,代表MainActivity不可交互了,
然后依次调用SecondActivity的OnCreate,OnStart,OnResume.就结束了。它并没有再调用MainActivity的
OnStop函数。让我们看下启动SecondActivity后的效果
从GIF动土上可以看出,在启动SecondActivity后,MainActivity处于SecondActivity后面,
虽然此时不可以点击操作MainActivity,但是可以看到。因此,调用的回调就只有MainActivity
的OnPause,而没有OnStop。
3. 点击屏幕其他区域,使得SecondActivity消失,此时的生命周期回调
可以看出,首先SecondActivy的OnPause(不可交互),MainActivity的OnResume(可交互),
SecondActivity的OnStop(不可见)和OnDestroy(销毁)。并没有调用MainActivity的OnStart,
因为MainActivity一直处于可见状态。
【总结】
Activity生命周期过程中的OnStart(代表Activity可见) OnResume(代表Activity可交互操作)。可以
设计一个DialogActivty该在一个Activty上方,出现可见但是不可操作的场景,从而对OnStart和OnResume
之间的区别理解的更深入一些。