Android应用程序持久化Activity类的静态数据成员

问题描述 投票:3回答:3

我在MainActivity类中声明了一个静态成员,如下所示:

public class MainActivity extends Activity {    
    public static int logNum = 0;
    ...
}

我在其他方法中递增此变量值。

奇怪的是,当我关闭这个应用程序并再次运行时,该值不会初始化为零,而是从最后一个递增的值开始。

我在Eclipse模拟器上运行它。这个模拟器有问题吗?

我不想要解决方案。我可以在onCreate()方法中将变量初始化为零。只是想知道为什么?

而且我没有点击主页按钮而不是后退按钮,并且还检查了onDestroy()

java android
3个回答
7
投票

静态数据一直存在,直到发生以下情况之一:

  • VM终止。
  • 该过程终止。
  • 该类已卸载。

现在,据我所知,Dalvik不会卸载类,因此静态的生命周期实际上与进程的生命周期有关。

即使在活动上调用onDestroy(),进程本身也可以无限期地运行以用于缓存目的。重新启动应用程序时,将恢复此缓存副本。

进一步阅读:http://developer.android.com/guide/components/processes-and-threads.html

现在,在从全部修改过的活动中具有public static变量的代码确实存在某些难闻的气味......


2
投票

静态变量(在声明它的位置无关紧要)将在Activity的生命周期的持续时间内存活,并且仅在进程'VM被系统关闭并重新启动时重置 - 这将在没有活动之后的某个时间发生在启动状态/服务和与该过程关联的其他组件处于活动状态。无法保证什么时候会发生。


2
投票

静态变量寿命

静态变量与类相关联,只要类在内存中,它们就会存在,并在类被卸载时消失(很少发生)。

在Android中你已经看到当我们关闭任何应用程序然后它没有完全关闭时,它仍然在最近的应用程序堆栈中,你可以通过长按主页按钮(在大多数设备上)看到。

当其他应用程序需要内存时,Android本身会踢出最近的应用程序

在Android中,静态变量卸载时 -

  • 你强制停止你的应用程序。
  • 应用程序崩溃。
  • 您清除应用数据。
  • 关闭您的设备。
  • Android推出了最近的应用程序

感谢Tarun Droid的来源。

© www.soinside.com 2019 - 2024. All rights reserved.