title: When to unregister BroadcastReceiver? In onPause(), onDestroy(), or onStop()?
body: <p>When should I use unregisterReceiver? In <code>onPause()</code>, <code>onDestroy()</code>, or <code>onStop()</code>?</p>
  
  <p>Note: I need the service to run in the background.</p>
  
  <p>Update:</p>
  
  <ol>
  <li><p>I get an exception releasing receivers <code>null</code>.</p></li>
  <li><p>Activity has leaked intent receivers are you missing call to <code>unregisterReceiver();</code></p></li>
  </ol>
  
  <p>Please tell me if there's something wrong, here's my code:</p>
  
  <pre><code>private boolean processedObstacleReceiverStarted;
  private boolean mainNotificationReceiverStarted;
  
  protected void onResume() {
  
      super.onResume();
      try {
          registerReceivers();
  
      } catch (Exception e) {
  
          Log.e(MatabbatManager.TAG,
                  "MAINActivity: could not register receiver for Matanbbat Action "
                          + e.getMessage());
      }
  }
  
  private void registerReceivers() {
  
      if (!mainNotificationReceiverStarted) {
          mainNotificationReceiver = new MainNotificationReceiver();
  
          IntentFilter notificationIntent = new IntentFilter();
  
          notificationIntent
                  .addAction(MatabbatManager.MATABAT_LOCATION_ACTION);
          notificationIntent
                  .addAction(MatabbatManager.MATABAT_New_DATA_RECEIVED);
          notificationIntent
                  .addAction(MatabbatManager.STATUS_NOTIFCATION_ACTION);
          registerReceiver(mainNotificationReceiver, notificationIntent);
  
          mainNotificationReceiverStarted = true;
  
      }
  
      if (!processedObstacleReceiverStarted) {
          processedObstacleReceiver = new ProcessedObstacleReceiver();
          registerReceiver(processedObstacleReceiver, new IntentFilter(
                  MatabbatManager.MATABAT_ALARM_LOCATION_ACTION));
          processedObstacleReceiverStarted = true;
  
      }
  
  }
  
  private void unRegisterReceivers() {
  
      if (mainNotificationReceiverStarted) {
          unregisterReceiver(mainNotificationReceiver);
          mainNotificationReceiverStarted = false;
      }
      if (processedObstacleReceiverStarted) {
          unregisterReceiver(processedObstacleReceiver);
          processedObstacleReceiverStarted = false;
      }
  
  }
  
  
  @Override
  protected void onDestroy() {
      // TODO Auto-generated method stub
      super.onDestroy();
  
      try {
  
          unRegisterReceivers();
          mWakeLock.release();//keep screen on
      } catch (Exception e) {
          Log.e(MatabbatManager.TAG, getClass() + " Releasing receivers-" + e.getMessage());
      }
  
  }
  </code></pre>