一般情况下我们应用的配置发生了改变的话,activity会被destory掉(目的是为了让应用去适应新的配置环境),然后重开启一个activty,这就涉及到数据存储的问题了。
一般情况下: activity在发生异常的时候,会先执行onSaveInstanceState()的,把我们的数据存进去,然后在onCreate(Bundle savedInstanceState)或者onRestoreInstanceState(Bundle savedInstanceState)的时候从bundle取出来就可以了,但onSaveInstanceState()只是适合小数据量的情况。如果数据量很大的话,比如说一个复杂的listView里面的item数据(比如说包含了bitmap),是否也要花一大部分代码去存储数据状态呢?显然是不对的,这样太占用内存了。
解决方案有两个
用fragment的形式存储相应数据的references(保证数据不被gc,当然也要保证这个fragment在activity 重新创建的时候不被回收),然后根据referneces来取出数据。fragment的设计如下:
- 自己来处理配置改变的情况,不要去resatart这个activity自己复写这个函数就好了,因为系统在这个函数里面执行销毁并重建activity的操作,传进来的newConfig对象包含了所有的变动的config信息,弄一个switch来筛选下需要覆盖的config变动就好
|
|