在将其标记为重复之前,请仔细阅读完整描述(本周有糟糕的经历)。
这是我的代码,确保我在所有五种方法中添加了注册和取消注册。 myReceiver是一个类级私有非静态成员。
@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();
}
我的Manifest xml中没有定义<receiver>
。我所拥有的只是代码来处理。
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);
}
}
根据互联网上的其他文章和stackoverflow中的问题,我不应该收到任何内存泄漏。我的代码中有什么遗漏的东西? targetSdkVersion是25,我正在测试Marshmallow OS。
此致
戒
答案 0 :(得分:0)
您也应该在onDestroy()方法中取消注册该服务。
答案 1 :(得分:0)
您在myReceiver = null;
中设置了RegisterInternetBroadcast()
,但这导致UnRegisterInternetBroadcast()
失败,因为接收方为空。
删除该行,它应该有效。