从ReceiverRestrictedContext获取应用程序,就好像使用了getApplication(不是getApplicationContext)

时间:2012-10-01 13:39:51

标签: android android-context

我有一个BroadcastReceiver,它必须从应用程序类中获取和修改一些数据。在某些活动中也会检索和修改此数据。

我读过这篇文章:

getApplication() vs. getApplicationContext()

而且,正如它所说,getApplication并不总是返回与getApplicationContext相同的对象。在我的例子中,如果我使用getApplicationContext在BroadcastReceiver中设置一个整数,然后在我的活动中检查它的值(使用getApplication),它总是0(默认值)。

我尝试在两个地方使用getApplicationContext,但返回的对象不一样。有没有办法在BroadcastReceiver中获取相同的对象,因为我使用getApplication进入我的活动?我应该使用SharedPreferences吗?

以下是一个例子:

广播接收器:

MyApp app = (MyApp)context.getApplicationContext();
app.setNumPA(10);

的活动:

MyApp app = (MyApp) getApplication();
Log.d("MyActivity", "Num PA: "+app.getNumPA());

在我的活动中,日志始终显示“Num PA:0”。

1 个答案:

答案 0 :(得分:4)

您应该明确使用一些持久存储,例如SharedPreferences

这背后的原因 - 您的应用程序实例几乎可以在任何时候被Android操作系统杀死(而您的应用程序在后台)。所以,你不能依赖你的变量,甚至static。您应该将状态保存在持久存储中。