1. 普通Java类中的全局变量经常被系统回收,我们都知道也都了解,Google官方推荐使用Application来代替static来存储变量,但事实上application存储的全局变量也经常会被系统回收,尤其是一些内存特别低的手机或者后台运行应用程序特别多的情况下。
2. 在项目中不知道你们遇到没有遇到:比如当我们在程序中启动相机,或者程序运行时有电话突然打进来,一些相机经常由于内存不足而把app整个杀掉了,内存大点的手机相对来说会好一些,但也不能完全排除被回收的情况;再比如我们app利用第三方应用程序进行分享操作时,分享出去后,再返回刚才app的界面,当前界面持有的全局变量就会被系统回收,内存特别低的手机表现尤为明显。
那么对于这类情况该怎么办呢?
如果是activity级别的变量,倒是可以利用onSaveInstanceState(Bundle outState)这个方法来保存,可是Application没有类似的方法。我们只能利用本地文件存储了,比如常用的shareprefence、sqlite、file三种存储方式。至少这是最可靠的方法了,当然由于要读写文件,速度上会受到影响,可以说是无奈之举。强烈建议google也给Application加上一个类似onSaveInstanceState(Bundle outState)的方法。
项目中遇到了第三方Mail、Gmail分享文件完毕后再返回app全局变量为空的问题,在一些内存较低的手机上复现概率较大,配置高的手机上则表现不出来,采用了在Activity OnCreate()方法中将全局变量在不为空得情况下赋值本地sharepreference,在用到的地方取值,本质上是对于文件的读写,这样理论上速度降低了,性能下降了,但是只是涉及到一个值,UI上没有任何感觉,也是无奈之选。
如果大家有其他好的方法,欢迎留言,指点。