[解決済み] アクティビティで作成した放送受信機の登録・解除はいつ行うのか?
2023-06-24 13:35:59
質問
アクティビティの onCreate イベントでカスタム ブロードキャスト レシーバーを作成する必要があり、アクティビティの onDestroy イベントでブロードキャスト レシーバーの登録を解除する必要があるのは明らかです。
わかりやすくするために、私が使用しているコードのスニペットを示します。
public class AnActivity extends Activity {
private ResponseReceiver receiver;
public class ResponseReceiver extends BroadcastReceiver {
public static final String ACTION_RESP =
"mypackagename.intent.action.MESSAGE_PROCESSED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Start a dialogue if message indicates successfully posted to server
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
IntentFilter filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
アクティビティのonPause/onResumeとonStart/onStopイベントは、ブロードキャストレシーバの登録と解除も行う必要があると読んだことがあります。
私は本当に、このためのベスト プラクティスと見なされるものとその理由を理解したいと思っています。
どのように解決するのですか?
受信機の登録と解除が必要です
onStart()
と
onStop()
.
Activityが登録する唯一の理由は
BroadcastReceiver
を登録する唯一の理由は、現在のアクティビティで何らかの方法でイベントを使用し、ユーザーにイベントを通知するためです。 もし
onStop()
が呼び出されたのなら
Activity
はもはやフォアグラウンドではないので、ユーザを更新することはできません。
ブロードキャストイベントをバックグラウンドで受信したい場合は、以下のようなサービスの利用を検討する必要があります。 はこちら .
Konstantinが言うように
onDestroy()
が呼び出されることは保証されておらず、長い間ブロードキャストを受信し続け、その間に
Activity
が開かれなくなった後でも、長い間ブロードキャストを受信し続ける可能性があります。
関連
-
[解決済み] getApplication()、getApplicationContext()、getBaseContext()、someClass.thisの違いと使い分け。
-
[解決済み] FloatingActionButtonのサンプルとサポートライブラリ
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Android Studioの「未実装メソッドの追加」機能
-
[解決済み] Androidでツールバーの戻るボタンの色を変えるには?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] ブルートゥースアプリケーションのテストにアンドロイドエミュレータを使用するには?
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
-
[解決済み] 文字列リソースにHTML?
-
[解決済み] HttpURLConnectionを使ったPOSTによるファイル送信
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] アンドロイドフラグメント onRestoreInstanceState
-
[解決済み] Androidのソースコードにある@hideの意味とは?
-
[解決済み] Android Navigation Architecture Component - 現在表示されているフラグメントを取得する
-
[解決済み] DialogFragmentを正しく終了させるには?
-
[解決済み] Android: ランドスケープモード用の代替レイアウト xml
-
[解決済み] ArrayList<MyCustomClass>をJSONArrayに変換する。
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] EditTextをReadOnlyにする
-
[解決済み] AsyncTaskLoaderとAsyncTaskの比較