1. ホーム
  2. android

フラグメントへのBroadcastReceiverの登録と解除

2023-10-31 07:25:06

質問

私のアプリには、3つのフラグメントタブを持つアクションバーがあります。 2 番目のフラグメントでは、BroadcastReceiver を登録および登録解除しています。 私は、受信機を onPause で登録を解除し onCreateView に登録し onResume .

getActivity().registerReceiver(this.batteryInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

getActivity().unregisterReceiver(batteryInfoReceiver);

1) 同じrecieverを2回(onCreateViewとonResumeで)登録しても大丈夫でしょうか(無害でしょうか)?

2) onResumeでrecieverを登録するだけで良いのでしょうか?

どのように解決するのですか?

以下のサイトをご覧ください。 ライフサイクル Fragments :

onCreateView()を使用します。 システムは、フラグメントが初めてユーザーインターフェイスを描画するときにこれを呼び出します。フラグメントのUIを描画するには、フラグメントのレイアウトのルートであるViewをこのメソッドから返さなければなりません。フラグメントがUIを提供しない場合は、nullを返すことができます。

onResume(): フラグメントは実行中のアクティビティに表示されます

onPause(): これは通常、現在のユーザーセッションを超えて永続化されるべきすべての変更をコミットする場所です(ユーザーが戻ってこないかもしれないので)。

結論です。

ということで、より良いのは の中だけでレシーバを登録するのがよいでしょう。 onResume() の中だけで登録し、登録解除は onPause() なぜなら onCreateView() はビューの階層構造のみを扱うからです。レシーバとは関係ありません。そのため、害はありませんが、無駄であることは確かです。

参考になれば幸いです。