关闭

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

标签: Androidactivity回收 数据丢失 数据恢复
3590人阅读 评论(2) 收藏 举报
分类:

最近我们的项目在发布一段时间后,客户那边时常会反馈一个问题,就是手机或者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),时候,把变量值再拿回来即可。

 

 

 

 

 

 

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:174124次
    • 积分:2586
    • 等级:
    • 排名:第14729名
    • 原创:47篇
    • 转载:106篇
    • 译文:0篇
    • 评论:159条
    文章分类
    最新评论