android 应用被系统回收,莫往Applicaotion存缓存/app被系统回收之后再打开发生了什么...

本文探讨了Android应用被系统回收后,不要在Application中存储缓存数据的原因,因为这可能导致空指针异常和数据丢失。当应用被回收后重新打开,会创建新的Application实例,先前的数据不再有效。解决方案包括避免使用全局静态变量,重新初始化数据,或者利用savedInstanceState进行数据恢复。同时,文章通过示例代码详细解释了不同解决方法的实现。
摘要由CSDN通过智能技术生成

先上结论:

1、尽量不要往Application里面存放缓存数据(因为app用application缓存切使用全局数据,当这个app为后台程序时又被系统gc回收后我们再次打开app,就会导致空指针)

2、app被gc回收后再次点击该app发生了什么(比如我们 app甲先后依次打开了a,b,c这三个activity,这时a,b,c都是在同一个线程的,这时我们按下home键,利用MMDS强制关闭我们程序甲的process,其实也就是模拟被gc回收了。这个时候我们在打开程序甲,会发现打开的是程序甲这的c这个activity,这个时候c是在一个新的线程里面的,而不是在原来的线程里面的)

有图有真相。下图演示因为当安卓app被系统gc回收后我们再次打开app产生空指针导致数据丢失的现象

82nB33gaNzuiT7tm.gif

application缓存丢失演示.gif

上图程序没挂是因为我们缓存在application的值我们这是用作显示,null就是空了,当我们使用了这个值马上程序就会应为空指针而挂掉。

下面我们使用以下给gc回收的缓存在application的值

yQiW4vpbbZvrpfiy.gif

application空指针演示.gif

一、不要往Application存缓存数据

当然这不是绝对化,只是这么建议。

在你的App中的很多地方都需要使用到数据信息,它可能是一个session token,一次费时计算的结果等等,通常为了避免Activity之间传递数据的开销,会将这些数据通过持久化来存储。

有人建议将这些数据放在Application对象中方便所有的Activity访问,这个解决方案简单、优雅并且是……完全错误的。

你如果你将数据缓存到Application对象中,那么有可能你的程序最终会由于一个NullPointerException异常而崩溃掉。

1、数据存在Application被gc后数据都是的demo演示

下面通过demo演示因为数据存放在application导致数据丢失的情况:

1、新建一个类MyApplication继承自Application,弄一个那么的属性设置对应的get和set方法,并且让我们的程序的清单文件的application采用我们的MyApplication2、弄三个acitivity,MainActivity有一个按钮,点击则打开FirstActivity,而Activity的onCreate方法干的事就是给MyApplicatipn的name属性set一个值,比如“Try Text”,接着就直接打开我们的SecondActivity3、SecondAcrivity直接有一个TextView控件,这个控件用于显示从MyApplication取出来的那么的值。

嗯就是这样子,正常情况下,我们进入MainActivity,点击 “打开FirstActivity” 只会就进入FirstActivity之后瞬间进入SecondActivity。SecondActivity正常显示Firs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值