博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
当Activity主题为Dialog或者windowIsTranslucent为true,生命周期的onStop不执行的问题
阅读量:5805 次
发布时间:2019-06-18

本文共 1872 字,大约阅读时间需要 6 分钟。

hot3.png

今天我在项目中遇到一个非常奇怪的问题, 我先描述一下问题 我们在栈内Activity情况如下 A--->B---> C---> D 我们的B为 singleTask模式启动的,其他的界面默认模式启动, 这个时候我们如果再次从D界面启动B界面,那么B的生命周期界面应该为

onNewIntent()--->onReStart()--->onStart()--->onResume(),(请注意刚刚说的这个生命周期是正确的), 但是在我的项目中我却发现生命周期并不是这样显示的 而是显示了 onNewIntent()--->onResume().为什么会出现这种情况呢。根据我的判断我发现这个跟C界面的主题属性有关, 请注意主题中的 <item name="android:windowIsTranslucent">true</item> 当这个值为 true 的时候 我们B界面的Activity的生命周期的onstop会不执行, 直接导致了我们在生命周期与我们正常的不一致。

当我将 <item name="android:windowIsTranslucent">false</item>改为false 的时候生命周期按上面流程启动生命周期为 onNewIntent()--->onReStart()--->onStart()--->onResume() ,变成我总结的样子。

好了我来总结一下:如果我们从一个Activity A 启动一个Activity B的时候,如果Activity B的主题属性中 <item name="android:windowIsTranslucent">true</item> 为true和话那么 Activity A 中的onStop不会执行。如果A为singleTask启动模式,那么我们再次启动A 的时候 生命周期为 onNewIntent()--->onResume()。 而不是onNewIntent()--->onReStart()--->onStart()--->onResume() 遇到这种BUG事非常让人头疼的,因为你并不知道这些细节问题。还好我发现了。

总结:

style/Theme.Dialog:

  1. A1跳转到A2,A2样式为Dialog(:style/Theme.Dialog):A1生命周期执行onPause(),返回时onResume()。

  2. A1跳转到A2,A2样式不是Dialog(:style/Theme.Dialog): A1生命周期执行onPause()-->onStop(),返回时onStart()-onResume()。(一般情况)

  3. A1跳转到A2再跳转到A1 A1的启动模式为singleTask,A2样式为Dialog(:style/Theme.Dialog):A1生命周期执行onPause() 再次跳转到A1的生命周期是onNewIntent()-->onResume()。

  4. A1跳转到A2再跳转到A1 A1的启动模式为singleTask,A2样不为Dialog(:style/Theme.Dialog):A1生命周期执行onPause()-->onStop() 再次跳转到A1的生命周期是onNewIntent()-->onReStart()-->onStart()-->onResume()。(一般情况)

注意: 在上面的情况中,A2的生命周期都是是正常的 onCreat()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestroy()

windowIsTranslucent:

  1. A1跳转到A2,A2样式属性windowIsTranslucent设置为true(Activity界面透明):A1生命周期执行onPause(),返回时onResume()。

  2. A1跳转到A2,A2样式属性windowIsTranslucent设置为fasle(大部分Activity界面):A1生命周期执行onPause()-->onStop(),返回时onStart()-->onResume()。(一般情况)

注意: 在上面的情况中,A2的生命周期都是是正常的 onCreat()-->onStart()-->onResume()-->onPause()-->onStop()-->onDestroy()

转载于:https://my.oschina.net/u/1175746/blog/757620

你可能感兴趣的文章
关于游戏
查看>>
[转]CNN目标检测(一):Faster RCNN详解
查看>>
NYOJ_214_单调递增子序列(二)
查看>>
数字三角形系列
查看>>
自动化测试时Ios设备无法调出键盘问题
查看>>
android将asseet当中的数据库文件拷到程序目录
查看>>
USACO 1.4.1 Packing Rectangles
查看>>
iOS多线程编程Part 2/3 - NSOperation
查看>>
[转]Unity3D学习笔记(四)天空、光晕和迷雾
查看>>
Microsoft Office Excel 不能访问文件“XXXXXXXXXXXXX.xls”。 可能的原因有:
查看>>
caioj 1082 动态规划入门(非常规DP6:火车票)
查看>>
Vue表单控件绑定
查看>>
查看tomcat启动文件都干点啥---catalina.bat(转)
查看>>
POJ 3458 Colour Sequence
查看>>
FZU 1064 教授的测试
查看>>
POJ 3684 Physics Experiment
查看>>
端口(百科)
查看>>
redis安装zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录
查看>>
工作中用到的正则表达式
查看>>
php读取网络文件curl,fsockopen,file_get_contents,file,fopen几种方法
查看>>