2012-10-01 48 views
2

我有一個BroadcastReceiver必須從應用程序類中獲取和修改某些數據。這些數據在一些活動中也被檢索和修改。從ReceiverRestrictedContext獲取應用程序就好像使用getApplication(而不是getApplicationContext)

我看到這篇文章:

getApplication() vs. getApplicationContext()

而且,因爲它說,getApplication並不總是返回相同的對象getApplicationContext。在我的情況下,如果我使用getApplicationContext在我的BroadcastReceiver中設置一個整數,然後在我的活動中檢查其值(使用getApplication),它始終爲0(默認值)。

我試過在兩個地方都使用getApplicationContext,但返回的對象是不一樣的。在使用getApplication獲取我的活動時,是否有任何方法可以在BroadcastReceiver中獲得相同的對象?我應該使用SharedPreferences嗎?

下面是一個例子:

廣播接收器:

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

活動:

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

在我的活動日誌總是顯示 「民PA:0」。

回答

4

您應該明確使用一些持久性存儲,例如SharedPreferences

背後的原因 - 您的應用程序實例可能隨時被Android操作系統殺死(而您的應用程序在後臺)。所以,你不能依賴你的變量,即使是static。您應該將狀態保存在持久存儲中。

相關問題