tenggangren的blog

程序猿、攻城狮!!不解释!

关于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),时候,把变量值再拿回来即可。

 

 

 

 

 

 

阅读更多
个人分类: android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭