即使未注册,活动也泄露了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()失败。

删除该行,它应该工作。

+0

yikes ...这是我的耻辱..我的意思是把它们写在UnRegisterInternetBroadcast()放置在完全错误的地方。 – harshal

您应该取消注册的onDestroy(服务)方法也。

+0

是的..代码里面的onDestroy()是长度..所以我没有添加问题..现在感觉它的好添加.. – harshal

+0

可以发布您的日志? –