关于android的activity被回收,导致的变量数据丢失的问题

最近我们的项目在发布一段时间后,客户那边时常会反馈一个问题,就是手机或者pad在待机的条件下,经常会发生一种情况。就是客户花时间做了一部分数据,在待机之后,返回发现数据丢失了。 发生数据丢失,要么就是程序错误了,错误没体现出来,要么就是android系统本身把咱们的数据给回收了。 我开始也是一位是static静态变量的问题,可是我几乎没用static静态变量啊。但是bug确实是存在的。更头疼的是这种bug是偶现的,怎么去查呢?

有问题就得去找方法解决,度娘、google都翻了,没啥好办法。于是就干脆用最笨的方法,找到用户说的那个 页面,然后自己填入很多数据,然后坐等待机,坐等bug出现,1分钟,2分钟,10分钟。。。吃个午饭,哎呦,出现了,什么情况啊!! 头疼。怎么办?  再去等?  还记得看到一个blog,说的是 说到内存的问题,android会回收一些停滞一段时间的内存块,也就是说内存不够的时候,会出现这个问题。 于是我就试了一把,用一个低配置的pad,然后先打开自己的程序,然后挂起。继续打开其他的程序,例如:QQ、飞信、360等吃内存大的程序。然后在eclipse里的DDMS,监视着我的程序进程,果然出现了我要的情况,打开某个程序的时候,我的程序被干掉了,被回收了。回收了不是说被完全的finish了,我们可以在menu按键选择自己的程序,然后打开,又能重新进去,不过此时的数据已经不是原来的数据了。此时activity会再次执行onCreate方法的,也就是一个全新的activity了,所以原因找到了,怎么改呢?

其实到这里就有方法了,咱们android的activity有这方法:onSaveInstanceState(Bundle outState) , onRestoreInstanceState(Bundle savedInstanceState) , 这两个方法的调用机制我就不再bb了,google、度娘比我说的好,就是重写这两个方法,把局部变量做一个缓存,然后在activity被回收以后,执行oncreate方法或者onRestoreInstanceState(Bundle savedInstanceState),时候,把变量值再拿回来即可。

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独领风骚的猫

我缺你这三瓜俩枣??嗯,缺

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值