0

중복으로 표시하기 전에 자세한 설명을 읽으십시오 (이번 주에 좋지 않은 경험이 있었음).등록 취소 한 후에도 Activity가 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(); 
    } 

내 매니페스트 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에서 테스트 중입니다.

감사합니다,

Harsha에

답변

0

RegisterInternetBroadcast()myReceiver = null;을 설정했지만 수신자가 null이므로 UnRegisterInternetBroadcast()이 실패합니다.

해당 행을 제거하면 올바르게 작동합니다.

+0

yikes ... 그건 나에게 수치 스럽다. 나는 그들을 완전히 잘못된 장소에 배치 된 UnRegisterInternetBroadcast()에 써야했다. – harshal

0

당신은들의 OnDestroy에서 서비스 (또한) 메소드의 등록을 취소해야합니다.

+0

예 .. code inside onDestroy()는 길이가 너무 길어서 질문을 추가하지 않았습니다 .. 이제는 추가하기가 좋아졌습니다 .. – harshal

+0

로그를 게시 할 수 있습니까? –

관련 문제