即使未注册,活动也泄露了IntentReceiver
将其标记为重复之前,请仔细阅读完整描述(本周有过不愉快的体验)。即使未注册,活动也泄露了IntentReceiver
这是我的代码,确保我在所有五种方法中添加了注册和取消注册。 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);
}
}
根据互联网上的其他文章和问题在*我不应该收到任何内存泄漏。我的代码中缺少任何东西? targetSdkVersion是25,我正在测试Marshmallow操作系统。
问候,
戒
您在RegisterInternetBroadcast()
中设置了myReceiver = null;
,但由于接收器为空,导致UnRegisterInternetBroadcast()
失败。
删除该行,它应该工作。
您应该取消注册的onDestroy(服务)方法也。
是的..代码里面的onDestroy()是长度..所以我没有添加问题..现在感觉它的好添加.. – harshal
可以发布您的日志? –
yikes ...这是我的耻辱..我的意思是把它们写在UnRegisterInternetBroadcast()放置在完全错误的地方。 – harshal