Low Memory状态下app状态的恢复

当Android应用在低内存状态下被系统回收并重新打开时,发现原本的Fragment显示为空白,没有响应。经过调试,发现在低内存情况下,系统尝试恢复Fragment,但并未按预期进行正常初始化。解决方案是在Fragment的onAttach()方法中主动关联到Activity,但这种恢复方式可能造成复杂初始化的不稳定性。文章探讨了是否需要系统在低内存时恢复应用状态,并提出了期望系统提供自定义恢复选项的需求。
摘要由CSDN通过智能技术生成

app结构
     activity带有ViewPager
     ViewPager上带有4个fragment


这是非常典型的结构


操作过程
     点icon打开app
     点击home键隐藏app
     再次点击icon唤回app
     点击home键隐藏app
     开启多个其他app,要很耗费内存那种
     点击home键隐藏这些app
     再次点击icon唤回app
     app虽然唤回,但是上面的fragment已经不听招呼,空白,无反应


仔细debug,发现按键能够操作fragment,并且fragment能否反馈,但屏幕上还是显示一个空白fragment以及一个初始状态的变量值
所谓初始状态的变量值,是指静态代码设置的值,比如如下的字符串:

     public class FragmentListview extends Fragment {
         String currentPath = "static_ini_code_null";


在静态代码之后的初始化过程中这个值应该被改变,但是却没有,可见这是一个仅仅静态代码初始化的fragment

困扰了很久。在activity和fragment的所有生命周期函数处添加了打印,终于发现端倪

以下是第一次唤回app的流程,打印了activity,以及0和1两个fragment

lifecycle: DirPlayerActivity.onRestart()
lifecycle: FragmentListview.onStart() 0:/mnt/sdcard FragmentListview{41c2c1a0 #0 id=0x7f0a0001 android:switcher:2131361793:0}
lifecycle: FragmentListview.onStart() 1:/mnt/sdcard FragmentListview{41c3f848 #1 id=0x7f0a0001 android:switcher:2131361793:1}
lifecycle: DirPlayerActivity.onStart()
lifecycle: MyArrayAdapter.MyArrayAdapter()
lifecycle: MyArrayAdapter.MyArrayAdapter()
lifecycle: FragmentListview.setListviewAdapter() 0:/mnt/sdcard FragmentListview{41c2c1a0 #0 id=0x7f0a0001 android:switcher:2131361793:0}
lifecycle: FragmentListview.setListviewAdapter() 0:/mnt/sdcard FragmentListview{41c2c1a0 #0 id=0x7f0a0001 android:switcher:2131361793:0}
lifecycle: DirPlayerActivity.updateFileInfor()! FragmentListview{41c2c1a0 #0 id=0x7f0a0001 android:switcher:2131361793:0} [Lcom.maxproj.android.dirplayer.MyArrayAdapter;@41c2c018
lifecycle: MyArrayAdapter.MyArrayAdapter()
lifecycle: FragmentListview.setListviewAdapter() 1:/mnt/sdcard FragmentListview{41c3f848 #1 id=0x7f0a0001 android:switcher:2131361793:1}
lifecycle: FragmentListview.setListviewAdapter() 1:/mnt/sdcard FragmentListview{41c3f848 #1 id=0x7f0a0001 android:switcher:2131361793:1}
lifecy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值