Android中全局变量被系统回收的问题

探讨了Android中全局变量被系统回收的问题,特别是在内存较低的设备上更为常见。介绍了如何通过本地文件存储如SharedPreferences来避免变量丢失,并讨论了这种方法的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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上没有任何感觉,也是无奈之选。

如果大家有其他好的方法,欢迎留言,指点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值