android activity 退出闪屏
Opened this issue · 0 comments
Android Activity opStop 延时执行导致的闪屏
界面上有两个 activity
, 这里命令为 A
,B
. 然后是 A
启动B
,B
退出后回到A
.
出现的现象会诡异,只在华为的部分机型上面会出现闪屏,而且还是非必现。
找了半天,怀疑这个怀疑那个。
- 怀疑跟
activity
切换动画有关,就直接把切换动画禁用了。(本来动画就是在主题里面设置的,然后就去掉了这个设置) =================== 无效 - 怀疑是界面的
ListView
刷新过于频繁导致的,直接来一个粗暴的处理,如果oldlength == newLength
就不刷新。 ==================== 无效 - 实在找不到原因了。怀疑跟
activity
启动模式有关,把A
启动模式换成singleTop
. 也是没有效果 - 找不到了,放弃了。
...
这时候我想到了黄猫。于是就把问题描述了一下,问了黄猫。
- 黄猫先问我,是
A
闪屏,还是B
闪屏?
我看现象其实看不太出来到底是
A
还是B
,但是多看几次,感觉应该是A
. 就告诉黄猫是A
.
- 然后黄猫就叫我看看
A
的显示逻辑。
我一想,这显示逻辑应该没有什么问题的,不然别的手机怎么能正常显示呢,而且闪屏的手机也能正常显示啊。
没辙了,我想到了一个通用定位之道,就是打log
,我在A
和B
的所有生命周期的回调方法里面全部打了log
.
然后结合log
和闪屏现象,我发现了一个规律:就是A
启动B
的时候,如果A
的onStop
被执行了,那么B
退出,返回到A
的时候,就不会闪屏;如果A
的onStop
没有被执行,那么B
退出,返回到A
的时候,就会闪屏;
那么,现在的问题就变成了为什么A
启动B
,有时候A
会执行onStop
,有时候不会呢?
联系正常的
Activity
切换的生命周期:FirstActivity
启动SecondActivity
,然后SecondActivity
退出返回FirstActivity
.
这里的正常,指的的标准启动模式。
F
启动S
==> 首先是F
执行onPause
,接着S
执行了onCreate,onStart,onResume
, 接着F
执行onStop
.S
退出,===> 首先是S
执行onPause
,接着F
执行了onRestart,onStart,onResume
, 接着S
执行onStop,onDestroy
.
对于 **FirstActivity
启动SecondActivity
,启动之后,主动调用FirstActivity.finish()
退出FirstActivity
**这种,生命周期的执行过程是:首先是F
执行onPause
,接着S
执行了onCreate,onStart,onResume
, 接着 F
执行onStop,onDestroy
.
那么,可以推测是B
的onRestart,onStart,onResume
中做了某种耗时操作,导致A
的onStop
不能被立即执行到。
然后我就去看了B
的onRestart,onStart,onResume
,发现里面确实做了很多的逻辑。没办法,我最终的解决方案就是在A
启动B
的时候,同时finish
A
.