我有一个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”。
答案 0 :(得分:4)
您应该明确使用一些持久存储,例如SharedPreferences
。
这背后的原因 - 您的应用程序实例几乎可以在任何时候被Android操作系统杀死(而您的应用程序在后台)。所以,你不能依赖你的变量,甚至static
。您应该将状态保存在持久存储中。