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()

上一篇下一篇

猜你喜欢

热点阅读