美文网首页
Activity什么时候调用onPause()后不调用onSto

Activity什么时候调用onPause()后不调用onSto

作者: FynnJason | 来源:发表于2018-12-13 15:10 被阅读230次

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

    相关文章

      网友评论

          本文标题:Activity什么时候调用onPause()后不调用onSto

          本文链接:https://www.haomeiwen.com/subject/ldxbhqtx.html