2016-01-11 50 views
0

我最近查了一下this question,我的代碼,一個新的接收器使用registerReceiver(new BroadcastReceiver() ...方法從內部活動功能(稱爲例如,一些按鈕點擊)內註冊接收器在應用程序終止後進行監聽嗎?

我的問題是,當應用程序被殺害,將接收器仍然處於活動狀態?如果活動自行完成並啓動另一項活動,情況如何?而如果它只是經歷onStop()onStart()週期或onPause()onResume()

我應該使用某些服務運行registerReceiver嗎?但是,再次,當我的應用程序被任務管理器殺死時,這是否也會導致我的服務中斷?

+0

使用'LocalBroadCastReceiver'。來自系統的廣播是全球性的。出於安全原因,最好使用'LocalBroadCastReceiver'。 – Raghunandan

回答

3

將接收器註冊到onResume()並在onPause()方面取消註冊與Activity生命週期有關的部分。

private MyReceiver mReciever; 

... 
... 

@Override 
public void onResume(){ 
    super.onResume(); 

    /* Create the receiver if it doesn't exist already */ 
    if(mReceiver == null){ 
     mReceiver = new MyReceiver(); 
     IntentFilter filter = new IntentFilter("SOME_FILTER"); 
     registerReceiver(mSentReceiver, filter); 
    } 
} 

@Override 
public void onPause(){ 
    super.onPause(); 

    /* Unregister the receiver if it isn't null */ 
    if(mReceiver != null){ 
     unregisterReceiver(mReceiver); 
    } 
} 

如果應用程序被殺死(當發生這種情況時一切都會丟失),接收器將不會被激活。但是,如果您在其中註冊的活動/片段尚未被垃圾收集,則該應用仍處於前景/後臺。

如果通過AndroidManifest進行註冊,則接收者在所有活動/片段中都會被全局激活。你希望在活動/片段中註冊接收者,當你希望它只對那個特定活動/片段有效時(兩者相互耦合/相互依賴)。但是,如果沒有活動片段/活動的依賴關係,您將使用AndroidManifest聲明。

+0

真棒回答,thx –

+0

沒問題,隨時接受答案,如果它解決了你的問題,或讓我知道,如果我能以任何其他方式幫助 –

相關問題