0

將其標記爲重複之前,請仔細閱讀完整描述(本週有過不愉快的體驗)。即使未註冊,活動也泄露了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); 
     } 
    } 

根據互聯網上的其他文章和問題在stackoverflow我不應該收到任何內存泄漏。我的代碼中缺少任何東西? targetSdkVersion是25,我正在測試Marshmallow操作系統。

問候,

回答

0

您在RegisterInternetBroadcast()中設置了myReceiver = null;,但由於接收器爲空,導致UnRegisterInternetBroadcast()失敗。

刪除該行,它應該工作。

+0

yikes ...這是我的恥辱..我的意思是把它們寫在UnRegisterInternetBroadcast()放置在完全錯誤的地方。 – harshal

0

您應該取消註冊的onDestroy(服務)方法也。

+0

是的..代碼裏面的onDestroy()是長度..所以我沒有添加問題..現在感覺它的好添加.. – harshal

+0

可以發佈您的日誌? –

相關問題