开发问题随笔

Android系统在内存不足的时候,会将后台的Activity回收掉,当重新回到这个Activity的时候,通过指定的方法进行内存恢复。但是大部分情况下,Activity的内容都是作为展示用,并不需要我们特殊去做低内存的状态保存和回收,重新创建显示就可以了。少部分情况下我们需要自己进行处理,当这些和Fragment关联起来的时候,就会有了新的变化。

原计划是每周写一篇与近期工作相关的blog,既巩固自身的知识,又能够当做备忘录,便于以后查看。但是近两周,周末一般都有零零散散的事情,加上没有想好写什么,所一直拖了两周。今天抽时间随便水一篇吧。聊胜于无。

以前对于Fragment的低内存情况的数据缓存和恢复没有特意了解,一直以为和Fragment是一致的。但是现在才发现一些需要注意的细节,需要后续开发过程中注意:

  1. Activity 在内存恢复的时候会一并对原来的Fragment进行恢复。原来一直记得是给Fragment打上TAG,然后就可以通过 findFragmentByTag 方法获取到对应的Fragment。但是这次试验后发现,添加的Tag并没有被恢复出来。
  2. Fragment的恢复过程是,重新创建一个新的Fragment,而不是使用原有的Fragment进行恢复,这一点也让我感到有些不可思议,因为原有的Fragment并没哟被释放掉,但却没有对其进行合理的利用。而是通过Fragment.instantiate 方法重新创建了一个一模一样的,然后在相应的方法中将数据恢复出来。

关于这两点,是和我以前的认知有一些冲突的,但是在support 25.0.1 中,表现确实很是这样子,查看源码也是如此,只能暂时先将情况记录下来,后续有机会翻一翻以前版本的support包,看看到底是怎么一回事了。