6
我創建了一個可以放在應用程序中不同位置的自定義視圖。我無法避免在視圖內使用BroadcastReceiver從應用程序的其餘部分獲取消息。註冊到自定義視圖內的本地廣播
我讀過它不被推薦(Where should I unregisterReceiver in my own view?),但如果我選擇使用它,是否有一個地方可以從BroadcastManager註銷視圖?
我創建了一個可以放在應用程序中不同位置的自定義視圖。我無法避免在視圖內使用BroadcastReceiver從應用程序的其餘部分獲取消息。註冊到自定義視圖內的本地廣播
我讀過它不被推薦(Where should I unregisterReceiver in my own view?),但如果我選擇使用它,是否有一個地方可以從BroadcastManager註銷視圖?
我建議你使用LocalBroadcastManager。這就像一個BroadcastReceiver,其Intents只能在你的應用程序中看到。
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// your code here
}
};
@Override
protected void onPause() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver);
super.onPause();
}
@Override
protected void onResume() {
LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this);
IntentFilter filter = new IntentFilter();
filter.addAction(MyClass.MY_ACTION);
lbm.registerReceiver(receiver, filter);
super.onResume();
}
這實際上是我在做什麼,但因爲我創建一個自定義視圖(不具有的onDestroy等活動)的過程中我註冊 - 我無法找到一個合適的地方註銷我的接收器。 。所以目前我沒有:/ – 2013-04-10 07:27:36
視圖(或自定義視圖)沒有像活動或服務那樣的生命週期,因此無法知道它何時被銷燬或隱藏。您應該控制所有視圖中包含它們的活動的所有註冊/取消註冊操作。 – vggonz 2013-04-10 08:03:10
我會以此爲答案,儘管我也希望自定義視圖也可以在這個意義上是獨立的,這實際上是限制性的......如果有人有一個我很想聽到的想法,謝謝。 – 2013-04-14 11:18:43