にbroadcastReceiversをバインドする方法を私はonInactive()
とonActive()
コールバックで多くのBroadcastReceiver
の登録を解除し、登録できるようにしたいと思います。だから私はこのような何かをしたい:AndroidのアーキテクチャコンポーネントLiveData - Androidの<a href="https://developer.android.com/reference/android/arch/lifecycle/LiveData.html" rel="nofollow noreferrer">LiveData</a>を使用して、ライフサイクル
public class BroadcastRecieverLiveData extends LiveData<BroadCastReciever> {
private BroadcastReciever reciever;
private Context context;
public BroadcastRecieverLiveData(Context context) {
this.context = context;
}
@Override
protected void onActive() {
IntentFilter filter = new IntentFilter();
filter.addAction("SOME_ACTION");
filter.addAction("SOME_OTHER_ACTION");
reciever = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something based on the intent's action
}
};
registerReceiver(reciever, filter);
}
@Override
protected void onInactive() {
if (reciever != null) {
context.unregisterReceiver(reciever);
}
}
}
私は、これはコードの最大の代わりに、onDestroy
に中継をきれいにするための設計パターン可能性が考えていました。このようにLiveDataを使用する上でのあなたの考えは何ですか?それを使用する例がありますhere
あなたが書いたことは、アクティビティコンテキストが決して解放されないのでメモリリークです。 – j2emanue
@ j2emanue: 'アプリケーションコンテキスト'を渡さないで、 'activity'コンテキストを渡してください! – AndiGeeky
@ j2emanue:回答の中で言及された参照コードリスト。それには位置リスナが付いています。代わりに、あなたの放送受信機を使用することができます! – AndiGeeky