Search code examples
androidbroadcastreceiver

Destroy BroadcastReceiver in onResume()


I have onResume() and onDestroy() methods in my MainActivity. How can I detroy the registerReceiver in the onResume() method. I tried to assign it to variable but without success.

	@Override
	protected void onResume() {

		 registerReceiver(new BroadcastReceiver() {

			@Override
			public void onReceive(Context context, Intent intent) {
				check_wifi_available();

			}
		}, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
		super.onResume();

	}

	@Override
	protected void onDestroy() {
		unregisterReceiver();
		super.onDestroy();
	}


Solution

  • From the android documentation:

    If registering a receiver in your Activity.onResume() implementation, you should unregister it in Activity.onPause(). (You won't receive intents when paused, and this will cut down on unnecessary system overhead)

    Define your receiver as a class variable like this:

    private BroadcastReceiver mReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) {
         check_wifi_available(); 
       } 
     } 
    

    Then implements the onPause() / onResume() methods like this:

    @Override 
    protected void onResume() { 
         super.onResume(); 
         registerReceiver(mReciever, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    } 
    
    @Override 
    protected void onPause() { 
        super.onPause(); 
        unregisterReceiver(mReceiver);
     }  
    

    No need to unregister it in onDestroy() method.