2011-11-17 201 views
6

使用Android 2.1+。我有一个服务不时被操作系统杀死(由于内存压力,我猜)。杀死Android服务和静态变量

该服务维护一些使用类的静态成员字段的状态。我期望静态字段保持其值,尽管该服务被杀死并由操作系统重新启动。

但是,它似乎并没有像这样发生。重新启动后,静态变量将重置为默认值。 这是应该发生的事情吗?我应该使用另一种方式来保持持续状态,尽管杀死/重启?

回答

6

是的,这是当你的服务被杀时发生的事情。该程序被取出内存,并且当它被重新加载到内存中时,静态变量的默认值都被假定。换句话说,程序的字节码不能从执行到执行。

通常认为使用静态变量来保持状态是不好的。尝试将它们存储在预先存储中,如sqlite数据库。

+1

我还指定,因为静态字段被重置,这意味着OS会杀死整个应用Java进程。是的,这是不时发生,检查这篇文章 - http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables/4642069#4642069 –

+1

Android真的没有提供保持持久性的手段状态比写每次闪光? (例如,onDestroy不保证被调用!!!?)我的服务改变状态一个LOT,这将增加电池的使用,并加快闪光的磨损,如果我不得不触摸闪光灯每次状态改变! – Michael

+0

@Michael从[onDestroy方法的文档](https://developer.android.com/reference/android/app/Activity.html#onDestroy()): 注意:不要指望这个方法被称为一个保存数据的地方!例如,如果一个活动正在编辑内容提供者中的数据,那么这些编辑应该在onPause()或onSaveInstanceState(Bundle)中提交,而不是在这里。 –