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

原创 2013年12月02日 17:44:33

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

 

 

 

 

 

 

相关文章推荐

异常情况下Activity数据的保存和恢复

异常情况下Activity数据的保存和恢复 如何保存和恢复数据 如何防止Activity重建 异常情况下Activity数据的保存和恢复如何保存和恢复数据正常情况下Activity的生命周期比较简单,...

关于intent中传输字符串丢失的解决…

问题: 网络setting和铃声setting用的是同一个settings 因而传入不同的变量就有不同的tab和 content 在传输过程中intent丢失了title,导致两个setting的ti...

关于Android应用程序退至后台,再次启动数据丢失的问题

问题描述: 最近项目中出现了个Bug,打开应用程序按home键退出前台,启动其他的应用,经过一段时间再次启动自己的应用程序,发现界面中出现了数据丢失问题,导致程序出现一系列问题。 发现即使用Sta...

解决安卓开发中静态变量被系统回收的问题

安卓开发中,为了方便,我们几乎不可避免用到全局静态变量,方便在不同界面和类中共享使用,然后,一个致命的问题是:静态变量会被系统回收。举个例子,某个静态类有一个静态成员变量public static i...
  • ithouse
  • ithouse
  • 2016年11月24日 14:07
  • 3648

Android保存Activity销毁而丢失的数据

安卓中,活动存在四种状态,分别是 运行状态、暂停状态、停止状态和销毁状态,除了运行状态之外,当系统内存不足的情况下,其他三种状态都有可能被回收,这样就会出现数据丢失的情况,那么如何在活动被回收之前保存...

关于Android中静态变量static被回收问题

最近接手一个项目,是别人开发差不多的负责维护。发现一个bug,就是长时间挂后台待机再次进去会”白屏“。或者在低端机开大量程序后也会出现。只能退出程序重新登录。 后来经过排查,发现正是保存登录信息的静态...
  • big_man
  • big_man
  • 2014年12月17日 17:22
  • 2580

解决Android被系统回收,重打开崩溃等问题

流程再现:应用入口FirstActivity,FirstActivity中打开SecondActivity,Second中用了First的静态变量list。如下: public class Firs...

后台的Activity被系统回收怎么办

你后台的Activity被系统回收怎么办:onSaveInstanceState       当你的程序中某一个Activity A 在运行时中,主动或被动地运行另一个新的Activity B ...

Android系统回收Activity的优先级

下面是进程的重要程度,按从高到低排序,当系统需要回收资源的时候,排在下面的优先被杀掉。   1.前台进程     a.该进程有用户正在交互的activity,即调用过onResume()的Act...
  • lygsust
  • lygsust
  • 2016年10月10日 14:33
  • 621

Android之Activity(八):活动意外被回收,如何处理临时数据的保存问题?

解决方法如下所示:public class MyActivity extends Activity { //在创建活动时调用,恢复临时数据 @Override protecte...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于android的activity被回收,导致的变量数据丢失的问题
举报原因:
原因补充:

(最多只允许输入30个字)