我在MainActivity类中声明了一个静态成员,如下所示:
public class MainActivity extends Activity {
public static int logNum = 0;
...
}
我在其他方法中递增此变量值。
奇怪的是,当我关闭这个应用程序并再次运行时,该值不会初始化为零,而是从最后一个递增的值开始。
我在Eclipse模拟器上运行它。这个模拟器有问题吗?
我不想要解决方案。我可以在onCreate()
方法中将变量初始化为零。只是想知道为什么?
而且我没有点击主页按钮而不是后退按钮,并且还检查了onDestroy()
。
静态数据一直存在,直到发生以下情况之一:
现在,据我所知,Dalvik不会卸载类,因此静态的生命周期实际上与进程的生命周期有关。
即使在活动上调用onDestroy()
,进程本身也可以无限期地运行以用于缓存目的。重新启动应用程序时,将恢复此缓存副本。
进一步阅读:http://developer.android.com/guide/components/processes-and-threads.html
现在,在从全部修改过的活动中具有public static
变量的代码确实存在某些难闻的气味......
静态变量(在声明它的位置无关紧要)将在Activity的生命周期的持续时间内存活,并且仅在进程'VM被系统关闭并重新启动时重置 - 这将在没有活动之后的某个时间发生在启动状态/服务和与该过程关联的其他组件处于活动状态。无法保证什么时候会发生。
静态变量寿命
静态变量与类相关联,只要类在内存中,它们就会存在,并在类被卸载时消失(很少发生)。
在Android中你已经看到当我们关闭任何应用程序然后它没有完全关闭时,它仍然在最近的应用程序堆栈中,你可以通过长按主页按钮(在大多数设备上)看到。
当其他应用程序需要内存时,Android本身会踢出最近的应用程序
在Android中,静态变量卸载时 -
感谢Tarun Droid的来源。