Before marking it as duplicate, please read through full description (had bad experience this week).
Here is my code, to be sure I added registering and unregistering in all five methods. myReceiver is a class level private non static member.
@Override
public void onPause() {
super.onPause();
UnRegisterInternetBroadcast();
storePreferences();
}
@Override
public void onResume() {
super.onResume();
RegisterInternetBroadcast();
}
@Override
protected void onStop()
{
UnRegisterInternetBroadcast();
super.onStop();
}
@Override
protected void onDestroy() {
UnRegisterInternetBroadcast();
super.onDestroy();
}
I do not have <receiver>
defined in my Manifest xml. All I have is below code to handle.
public void RegisterInternetBroadcast() {
if(myReceiver == null) {
IntentFilter filter = new IntentFilter();
filter.addAction(getPackageName() + "android.net.conn.CONNECTIVITY_CHANGE");
myReceiver = new InternetConnectionReceiver();
registerReceiver(myReceiver, filter);
myReceiver = null;
}
System.gc();
}
public void UnRegisterInternetBroadcast() {
if(myReceiver != null) {
myReceiver.clearAbortBroadcast();
unregisterReceiver(myReceiver);
}
}
As per other articles over internet and questions in stackoverflow I should not be receiving any memory leaks. Any missing things in my code? targetSdkVersion is 25 and I am testing in Marshmallow OS.
Regards,
Harsha
You set myReceiver = null;
in RegisterInternetBroadcast()
but that causes the UnRegisterInternetBroadcast()
to fail, since the receiver is null.
Remove that line and it should work.