锁屏下通过PendingIntent启动Activity致onStop()重复调用问题咨询
关于锁屏下PendingIntent启动Activity导致原Activity onStop()调用两次的问题
这其实是Android系统的预期行为,而非Bug,背后是锁屏状态下系统处理Activity启动的特殊逻辑在起作用,我来给你拆解下:
- 当设备处于锁屏状态时,你通过PendingIntent启动新Activity的请求,会先被系统的锁屏相关组件(比如Keyguard对应的Activity)拦截。这个时候你的原Activity会被系统强制暂停并转入后台,触发第一次
onStop()。 - 随后系统会完成解锁流程(哪怕你用的是无密码锁屏,这个步骤也会执行),然后才会真正启动你指定的目标Activity。在这个过程中,原Activity会短暂地从后台回到前台,紧接着又被新启动的Activity覆盖,这就会触发第二次
onStop()。
你可以做个小验证:在你的测试Activity里加上onStart()和onResume()的日志打印,会看到第一次onStop()之后,原Activity会快速触发onStart()甚至onResume(),然后立刻又进入onStop()状态——这就是两次调用的完整路径。
另外,如果你在非锁屏状态下重复这个测试,就不会出现两次onStop()的情况,这也能侧面证明这是锁屏场景下的特殊处理逻辑。
小建议
如果你的业务逻辑对onStop()的调用次数敏感,最好不要直接依赖这个方法的调用次数来做判断。可以通过isFinishing()或者isDestroyed()来区分Activity是真的要被销毁,还是只是暂时转入后台;或者把需要只执行一次的逻辑移到onPause()里处理,避免受这种特殊场景的影响。
内容的提问来源于stack exchange,提问作者Bek
相关产品推荐
相关产品推荐

