7

我有一个BroadcastReceiver类。我有一些声明它的值在onReceive()方法中更新的静态变量。根据我的知识,静态变量将保持onReceive调用的值。有没有可能,当我将失去这些价值(像我的班将被卸载重置静态变量)?这些基本上是我需要用于多个onReceive调用的一些临时变量。BroadcastReceiver生命周期 - 静态变量

回答

4

BroadcastReceiver Lifecycle文档...

一个BroadcastReceiver对象仅适用于调用的onReceive(上下文,意图)的持续时间。一旦你的代码从这个函数返回,系统就认为该对象已经完成并且不再处于活动状态。

这并不会使静态变量的使用变得切实可行,因为系统会快速清理事物。我会尝试使用SharedPreferences致电...

context.getSharedPreferences("MyReceiver", MODE_PRIVATE)

...接收机的onReceive(...)方法(有一些名字这是有道理的,以您的应用程序替换"MyReceiver")。

+1

但静态变量是类级变量,不应在对象销毁时清除。如果我错了,请纠正我。我知道getSharedPreferences(),但只是想使用静态变量,因为有些时候我需要在我的工作完成后清除这些变量,并且我不希望它们仍然存在于SharedPreference中。最后,如果它可以通过变量实现,然后我不想使用SharedPreferences。如果它不能那么肯定我会去SharedPreferences。 – Sush 2011-06-10 05:27:03

+0

@Sush:“但是静态变量是类级变量,当对象销毁时不应清理。” - 那么当这个类的最后一个实例被销毁时,'哪里'类变量'存在'?他们不只是在网络空间中等待另一个类的实例出现。正如从文档引用中所解释的那样,当'onReceive(...)'退出时,系统认为该对象被完成。基本上你不能保证是否/什么时候'BroadcastRecever'对象将被GC'd。至于'SharedPreferences',你可以在不再需要时简单地'清除'它们。 – Squonk 2011-06-10 15:31:13

+3

@MisterSquonk:我同意SharedPreferences可以完成这项工作。但是我坚决不同意,一旦类的最后一个实例被破坏,静态变量就会被销毁。当类被加载到内存时,静态变量被初始化,当应用程序启动并停留在内存中直到该类在内存中。它不依赖于对象的生活。 – Sush 2011-06-10 18:23:17

0

或者你当然可以在你的活动类中声明静态变量。

+0

是的,我可以做。但是在** BroadcastReceiver **中声明静态变量是否存在问题? – Sush 2011-06-10 05:39:51

+0

静态变量在Activity,BroadcastReceiver或类中声明并不重要。一个静态变量的行为相同。 – jclova 2014-12-04 16:08:36