一直以来一直以为Activity中Dialog的出现为触发onPause生命周期函数。
其实不然。如果不信的话可以自己写个小demo试试。(例如,在onCreate中create一个Dialog,debug看看会不会蹦到onPause方法中去)
按照sdk doc中的说明:
1. onPause: Called when the system is about to start resuming another activity.
2.onPause()
is called when the device goes to sleep or when a dialog appears.
网上在解释dialog出现为何不会触发onPause方法有一种不负责任的说法,依据就是第一条,说只有另一个activity的出现才会触发onPause。
但再看看上述第二条,不是说了dialog一出现onPause就会被调用么?
看上去好像是前后矛盾,其实不然。
根据本人的理解,A dialog is always created and displayed as a part of anActivity
也就是说dialog在Android系统中是不能单独存在的,只能作为Activity的一个组成部分。
就像我们设计的Activity中的其他元素,比如说按钮啊,各种view一样,只不过这个特殊的view在出现的时候其他元素将不能触碰到,而且颜色略暗而已。(这是本人对其通俗的便于理解的解释 呵呵)
既然其只是activity中得一个元素而已,他的出现当然不会触发Activity的生命周期函数喽!
只有Activity之间的转换才会调用生命周期函数。
而Activity内部的组件类似于显示隐藏的操作当然也就不会触发生命周期函数了。
那么有人会说了,那onPause有什么存在的意义呢?完全可以被onStop代替嘛。。
Negative!
这里举几个反例说明吧:
1. 一个透明的包含Dialog的Activity 出现
2. 按poweroff锁屏
这两种情况下 都只会触发onPause而不会触发onStop
至于之前所说google文档中说明的dialog的出现会触发dialog,这当然指的也是另一个Activity中得dialog。
正如之前所分析的,dialog不能独立存在,必须附属于一个activity,那么sdk doc所描述的这种情况其实也是一个属于透明Activity中的dialog出现才会触发onPause罢了。
分析完毕,如有错误欢迎指正!