중복으로 표시하기 전에 자세한 설명을 읽으십시오 (이번 주에 좋지 않은 경험이 있었음).등록 취소 한 후에도 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에
yikes ... 그건 나에게 수치 스럽다. 나는 그들을 완전히 잘못된 장소에 배치 된 UnRegisterInternetBroadcast()에 써야했다. – harshal