0

我有一個問題:廣播接收器接收更多的意圖不是發給

我創建一個自定義廣播接收器,並在主要活動中的onCreate處理程序來註冊吧:

public class MainActivity extends ListActivity { 
    private static final LogReceiver logReceiver = new LogReceiver(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    LocalBroadcastManager.getInstance(this).registerReceiver(logReceiver, new IntentFilter(LogReceiver.ACTION_LOG)); 
    } 
... 
} 

廣播接收器類:

public class LogReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.i("intent", "intent <-"); 
    } 
} 

然後我使用下一個代碼從本地服務發送多個意圖:

Intent intent = new Intent(LogReceiver.ACTION_LOG).putExtra("log", logString); 
localBroadcastManager.sendBroadcast(intent); 
Log.i("intent", "intent ->"); 

日誌看起來很奇怪,我說:

  • 意圖 - >
  • 意圖< -
  • 意圖 - >
  • 意圖< -
  • 意圖< -
  • 意圖 - >
  • intent < -
  • 意圖< -
  • 意圖< -
  • ...

的第一時間LogReceiver只接收一個意圖,這是正確的,但每下一次比發送接收更平等的意圖。

我可以從我的項目中的意圖方法切換,但只是有趣的爲什麼會發生這種情況?

+1

你可能註冊了一大堆接收器(每次你輸入你的應用程序,除非你註銷它們) – njzk2

+0

感謝您的評論。事實上你是對的。 OnCreate被多次調用 - 只需使用調試器對其進行檢查即可。看來,我必須審查活動生命週期文章:) – Vsevolod

+1

將您的註冊代碼移至onResume並在onPause中取消註冊。 –

回答

0

您應該註銷活動的onDestroy中的接收器。 此外,你應該檢查這個接收器是否真的必須是靜態的。

如果您在整個應用程序中都需要接收器,它應該保存在一個單獨的singleton類中,或者保存在一個自定義應用程序類中,而不是一個Activity中。

然後,您可以在第一次啓動的活動中註冊接收器。但是您應該確保它只註冊一次,例如將boolean registered存儲到在LocalBroadcastManager註冊之前檢查的接收器中。