Activity什么时候调用onPause()后不调用onSto
2018-12-13 本文已影响230人
FynnJason
复习Activity知识点时,看到一个新奇的问题,Activity的生命周期在什么情况下会走onPasue()之后不走onStop()而直接走onResume(),这里以亲身测试来得出结论。
开始实验
我们创建一个FirstActivity,在程序启动时,生命周期执行如下:
onCreate()
onStart()
onResume()
锁屏时
onPause()
onStop()
看来锁屏是不行的
按下HOME键
onPause()
onStop()
看来回到手机桌面也是不行的
弹出Dialog
很多人肯定会认为,Dialog弹出,Activity应该会执行onPause()吧,其实经过测试Activity什么生命周期也不会执行,所以弹出Dialog方法也不行
跳转到另外一个Activity
我们再创建一个SecondActivity,让FirstActivity跳转到SecondActivity,其实这个太常见了,生命周期执行为
FirstActivity->onPause()
SecondActivity->onCreate()
SecondActivity->onStart()
SecondActivity->onResume()
FirstActivity->onStop()
那有人就要问了,到底什么情况会出现Activity生命周期是onPause()不走onStop()
成功方案一
我们修改Activity的主题
在AndroidManifest.xml中,我们将SecondAcitvity主题改为
android:theme="@android:style/Theme.Dialog"
然后我们在FirstActivity跳转到SecondActivity,发现生命周期执行为:
FirstActivity->onPause()
SecondActivity->onCreate()
SecondActivity->onStart()
SecondActivity->onResume()
成功了!
成功方案二
重新修改AndroidManifest.xml中SecondAcitvity主题
android:theme="@android:style/Theme.Translucent"
这是一种透明主题,Activity会透明出现,然后我们在FirstActivity跳转到SecondActivity,发现生命周期执行为:
FirstActivity->onPause()
SecondActivity->onCreate()
SecondActivity->onStart()
SecondActivity->onResume()
也成功了!
结论
综上所述,在Activity的主题是Dialog或Translucent时,启动的Activity的生命周期才会调用onPause()而不调用onStop()