一次FragmentActivity 横竖屏切换Fragment残留问题

现在正在做一个强制横屏的应用,用到了Fragment,为了兼容2.3,用的FragmentActivity。在AndroidManifest里面配置activity:android:configChanges="keyboard|keyboardHidden|orientation"

执行「锁屏 -> 转为竖屏-> 解锁」操作后,底下会出现一堆按竖屏ScreenSize布局的Fragment。

在onCreate()、onConfigurationChanged()等方法中加Log,依旧执行「锁屏 -> 转为竖屏-> 解锁」操作,得出Log如下:

11-28 10:21:32.707: I/AAA(21575): onCreate() land
11-28 10:21:33.018: I/AAA(21575): onResume() land
--------------------锁屏--------------------
11-28 10:21:39.694: I/AAA(21575): onPause() land
11-28 10:21:39.714: I/AAA(21575): onSaveInstanceState() land
-------------------转为竖屏------------------
11-28 10:22:05.930: I/AAA(21575): onDestroy() port
11-28 10:22:06.010: I/AAA(21575): onCreate() port
11-28 10:22:06.290: I/AAA(21575): onRestoreInstanceState() port
11-28 10:22:06.290: I/AAA(21575): onResume() port
11-28 10:22:06.300: I/AAA(21575): onPause() port
--------------------解屏--------------------
11-28 10:22:29.222: I/AAA(21575): onResume() port
11-28 10:22:29.403: I/AAA(21575): onPause() land
11-28 10:22:29.403: I/AAA(21575): onSaveInstanceState() land
11-28 10:22:29.413: I/AAA(21575): onDestroy() land
11-28 10:22:29.443: I/AAA(21575): onCreate() land
11-28 10:22:29.713: I/AAA(21575): onRestoreInstanceState() land
11-28 10:22:29.713: I/AAA(21575): onResume() land

根据Log猜测Fragment残留的原因是因为转为竖屏解锁过程中activity销毁重建了,同时Fragment是add()进去的,onSaveInstanceState()、onRestoreInstanceState()保存了之前的东西。

但是onConfigurationChanged()并没有被调用,百思不得其解,于是Google一下,终于发现这篇文章《android4.0 屏幕切换(避免重走Activity的生命周期)》。原来3.0以上系统要在android:configChanges中配置“screenSize” ——android:configChanges="orientation|screenSize“。

试了下,问题解决,Log如下:

11-28 11:47:07.857: I/AAA(24724): onCreate() land
11-28 11:47:08.167: I/AAA(24724): onResume() land
--------------------锁屏--------------------
11-28 11:47:22.652: I/AAA(24724): onPause() land
11-28 11:47:22.672: I/AAA(24724): onSaveInstanceState() land
-------------------转为竖屏------------------
11-28 11:47:29.718: I/AAA(24724): onConfigurationChanged() port
--------------------解屏--------------------
11-28 11:47:45.794: I/AAA(24724): onResume() port
11-28 11:47:45.864: I/AAA(24724): onConfigurationChanged() land



版权声明:本文为vinne1990原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。