0

重複としてマークする前に、完全な説明を読んでください(今週は悪い経験をしています)。登録していなくても、アクティビティがIntentReceiverを漏らした

ここに私のコードは、すべての5つの方法で登録と登録解除を追加することを確認することです。 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(); 
    } 

私のマニフェスト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

RegisterInternetBroadcast()myReceiver = null;を設定しましたが、受信者がnullなのでUnRegisterInternetBroadcast()が失敗する原因になります。

この行を削除しても問題はありません。

+0

yikes ...それは私のために残念です...私はそれらを完全に間違った場所に置かれたUnRegisterInternetBroadcast()に書き込むことを意味しました。 – harshal

0

あなたはまた、onDestroy()メソッドでは、サービスの登録を解除する必要があります。

+0

はい。コード内のデストロイ(長さ)は長かったですから質問に追加していませんでした。今すぐ追加できます。 – harshal

+0

ログを投稿できますか? –

関連する問題