Dialog 不会触发 onPause

一直以来一直以为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 an Activity 

也就是说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罢了。


分析完毕,如有错误欢迎指正!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值