6

特定の条件下で送信されるインテントがあります。ログは、一度しか送信されていないことを証明していますが、受信者はミリ秒間隔で複数回受信しています。

10-01 10:09:59.201: I/System.out(13543): SENDER CHECKPOINT  
10-01 10:09:59.211: I/System.out(13543): RECEIVER CHECKPOINT 
10-01 10:09:59.291: I/System.out(13543): RECEIVER CHECKPOINT 

ブロードキャスト レシーバーの登録は 1 つだけであり、登録された BR で使用されるアクション フィルターは 1 つだけであることを確認しました。別のスレッドで実行されているサービスがインテントをブロードキャストする単一のアクティビティでのみ使用されます。繰り返しになりますが、ログは 1 回のブロードキャストと複数の受信を裏付けています。さらに、エクストラはエコー レシートでは null です。

どうすればいいの?OSがそれをエコーし​​ている可能性はありますか?

ブロードキャストを送信するコード:

private void sendBroadcast(boolean status, String message, String action){
     System.out.println("SENDER CHECKPOINT");

     Intent intent = new Intent(action);
     Bundle bundle = new Bundle();
     bundle.putBoolean("status", status);
     bundle.putString("message", message);
     intent.putExtras(bundle);
     sendBroadcast(intent);

}

ブロードキャストを受信するコード:

private class displayUpdate extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) { 
            System.out.println("RECEIVER CHECKPOINT");


    };
}

登録:

@Override
public void onResume() {
    super.onResume();

    try {
        // just in case onResume is called w/o a pause  
        try{activity.unregisterReceiver(displayReceiver);}catch(Exception e){}

        filterRefreshUI = new IntentFilter(REFRESH_UI);
        activity.registerReceiver(displayReceiver, filterRefreshUI);

    } catch (Exception e) {
        e.printStackTrace();
    }

}

登録解除:

@Override
public void onPause() {
    super.onPause();
    try{unregisterReceiver(displayReceiver);}catch(Exception e){} 
}

本当に簡単です!それでも受信機は 2 回発射します。

ご参考までに、アプリが OS によって強制終了された場合のメモリ リークを防ぐために、登録/登録解除は onPause/onResume で処理されます。

4

0 に答える 0