2012-03-27 30 views
3

我正在編寫一些代碼,可以在設備/應用程序C2DM註冊標記更改時將某些設備持久數據遷移到網絡服務器。我的應用程序使用,它擴展了正常的應用自定義應用程序的類:IntentService是否從BroadcastReceiver的開始創建Application類的實例?

這由一個BroadcastReceiver(具體稱爲接收谷歌C2DM註冊標記的結果的接收器)

@Override 
public void onRegistered(Context context, String registrationId) throws IOException { 
    Log.d(TAG, "registrationId: " + registrationId); 
    Intent selectIntent = new Intent(this, AlertMigrationService.class); 
    this.startService(selectIntent); 
} 

(注最終踢掉類)。

我想技術上來說,當我的應用程序在後臺(或不運行)時可以調用這個接收器 - 那麼當我的意圖服務啓動時會發生什麼?它是否會將我的整個應用程序後臺並創建我的應用程序類的實例?

安全(甚至是一個好主意)我從IntentService中調用我的Application類的靜態方法嗎? (這些靜態方法在Application.onCreate初始化返回對象)

回答

4

當你的IntentService啓動時,它會創建應用程序類的實例,如果你的應用是不是已經運行。如果您的應用程序處於活動狀態,您將可以按原樣訪問已修改的特定於應用程序的對象。 但是如果您的應用程序被終止,然後br啓動服務,則會創建整個應用程序的新實例。靜態方法不會給你當時的價值。堅持數據的地方,不依賴於應用程序的生命週期是我的建議。