1. ホーム
  2. android

[解決済み] アクティビティで作成した放送受信機の登録・解除はいつ行うのか?

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 が開かれなくなった後でも、長い間ブロードキャストを受信し続ける可能性があります。