需求时这样的:页面A有个视频列表,固定竖屏;点击页面A的视频进行播放,然后选择全屏,进入页面B,页面B固定横屏。
然后返回到页面A的时候,我发现居然页面A刷新了。这让我有点晕:页面A有转屏么?理论上没有,启动页面B的时候有什么地方启动页面A吗?没有…
思考了好久,决定检查一下onCreate的运行情况,于是发现启动页面B的时候,页面A先是通过onSaveInstance保存,然后又重新onCreate,这个时候Bundle是有数据的。于是想到,启动新页面,新页面固定方向和旧页面不一致的时候的时候,其实是这样的:
在A页面转屏->A页面onSaveInstance保存->A页面销毁->A页面onCreate()->启动B页面
B返回A也是一样:
B返回->A页面转屏->A页面onSaveInstance保存->A页面销毁->A页面onCreate()
然而有个很糟糕的问题:
我的A页面是主页,销毁时清空了比如内存缓存,内存缓存保存类似现在翻到第几个标签页这种数据,怎么识别?
注意,调用onSaveInstanceState之后,可能销毁,也可能是重启的,如果在onDestroy()中清缓存,转屏的时候就会无效,因为转屏了,所以已经onDestroy()清缓存了。
思考了好久,最后想到下面的方法:
在onCreate(Bundle)的Bundle为null的时候清缓存。
但是这样启动还是有问题:播放效果变得差了。之前播放的时候返回,小窗口还能继续播放,现在直接重置。
于是怀疑视频播放的部分是不是被我改动了,copy回原来的,添加测试Activity…
还是不行,最后辗转许久,终于发现不能连续播放的原因:style中,没有设置:
<style name="AppTheme.NoneTranslucent" parent="AppTheme.Base">
<item name="android:windowIsTranslucent">false</item>
</style>
不过设置成这样有个缺点,顶上有浸入式会闪烁白边。这样的情况下onCreate(Bundle)只调用了一次,不会有转屏重新onCreate()的问题,不懂这两个东西之间有什么关系,先记录一下,慢慢找方法解决。