2013-03-24 7 views
6

アプリケーションの別の場所に配置できるカスタムビューを作成しました。ビューの内部でBroadcastReceiverを使用してアプリケーションの残りの部分からメッセージを取得することは避けられません。カスタムビュー内でローカルブロードキャストに登録する

これはお勧めしていませんが(Where should I unregisterReceiver in my own view?)、使用することを選択した場合は、BroadcastManagerからのビューの登録を解除する場所がありますか?

答えて

5

LocalBroadcastManagerを使用することをお勧めします。これは、あなたのアプリケーション内でのみインテントを見ることができるBroadcastReceiverのようなものです。私は私の受信機の登録を解除するために適切な場所を見つけることができません - 私がやっている実際のですが、私はカスタムビュー(onDestroyなどを持っていない活動)の作成時に登録していますので、

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(); 
} 
+0

。今のところ私はそうしません:/ –

+3

ビュー(またはカスタムビュー)はアクティビティやサービスのようなライフサイクルを持っていないので、いつ破壊されるか隠されているか分かりません。すべてのビューのすべての登録/登録解除アクションを、それらを含むアクティビティから制御する必要があります。 – vggonz

+0

私はこれを答えとして取り上げますが、カスタムビューもこの意味で独立していてもいいと思っていますが、本当に制限しています。誰かが私が聞いてみたいと思っているアイデアがあるなら、ありがとう。 –

関連する問題