【问题标题】:Killed Android service and static variables杀死Android服务和静态变量
【发布时间】:2011-11-17 19:27:42
【问题描述】:

使用 Android 2.1+。我有一项服务不时被操作系统杀死(我猜是由于内存压力)。

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

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

【问题讨论】:

    标签: android service static


    【解决方案1】:

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

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

    【讨论】:

    • 我还要指出,由于静态字段被重置,这意味着操作系统会杀死整个应用程序 Java 进程。是的,这种情况时有发生,请查看这篇文章 - stackoverflow.com/questions/708012/…
    • 除了每次都将其写入闪存之外,Android 真的没有提供保持持久状态的方法吗? (例如,不保证会调用 onDestroy !!!?)我的服务会更改很多状态,如果每次状态更改时我都必须触摸闪光灯,这会增加电池使用量并加速闪光灯磨损!
    • @Michael 来自documentation for the onDestroy method:注意:不要指望这个方法被称为保存数据的地方!例如,如果一个活动在内容提供者中编辑数据,那么这些编辑应该在 onPause() 或 onSaveInstanceState(Bundle) 中提交,而不是在这里。
    • @KurtisNusbaum documentation for onDestroy in a Service 没有注意到这样的限制(尽管显然它仍然存在),Service 也没有 onPause 或 onSaveInstanceState。
    • 糟糕,我的错。自从我看这篇文章已经有一段时间了,我只是假设我们在谈论活动。
    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多