2014-01-05 254 views
10

1)我有一個活動。該活動啓動一個服務,然後創建並註冊BroadcastReceiver。BroadcastReceiver生命週期

2)我有一個活動。此活動創建並註冊BroadcastReceiver。

在以上每種情況下,BroadcastReceiver的壽命何時結束?換句話說 - 當它被摧毀,不會再聽廣播?

回答

4

在清單中聲明廣播接收器以實現它的獨立生命週期。

http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

感謝您的鏈接,它清除了幾分,但我仍然不知道如何實現我的目標:我的活動僅用於註冊一個BroadcastReceiver。我希望此接收器在用戶退出活動後處於活動狀態 - 直到我明確取消註冊爲止。 – rincEwind

+1

@rincEwind:**「我希望這個接收器在用戶退出活動之後處於活動狀態 - 直到我明確取消註冊爲止。」** - 在這種情況下,請在您的問題中使用方法1。你不應該在一個'Activity'中註冊一個接收者,並且不需要先註銷它就退出'Activity'。將其註冊到一個「服務」中,但確保「服務」在其完成之前也將其註銷(如果/完成時)。不要把孤立的物體懸掛在外面。 – Squonk

+0

謝謝,這就是我最終做的,它似乎正在工作。 – rincEwind

0

一個BroadcastReciever生命週期結束(即停止接收廣播)當您註銷它。通常你會在onPause/onStop方法中做到這一點。但技術上取決於你。

例子:

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

    // Register mMessageReceiver to receive messages. 
    LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
     new IntentFilter("my-event")); 
} 

// handler for received Intents for the "my-event" event 
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    // Extract data included in the Intent 
    String message = intent.getStringExtra("message"); 
    Log.d("receiver", "Got message: " + message); 
    } 
}; 

@Override 
protected void onPause() { 
    // Unregister since the activity is not visible 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
    super.onPause(); 
}