public class OuterClass extends Something{
private int unit = 0;
private void methodX(int num){
//Do something here
}
public static class InnerClass extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Need to call methodX(100) here
}
}
}
나는 응용 프로그램을 크래킹 중이며 잘 동작합니다. 나는 내부 클래스에서Java의 정적 내부 클래스에서 외부 클래스의 전용 멤버에 액세스하는 방법
instance.methodX(100)
을 통해 변수를 OuterClass의
static OuterClass instance;
를 사용하여 액세스하고 때하지만 메모리 누수를 선도하고 있습니다. 내부 클래스에서 정적 키워드를 제거한 경우 브로드 캐스트 수신기가 시작되지 않았습니다.
이것은 내 매니 페스트 파일에 포함되어 있습니다.
<receiver
android:name=".OuterClass$InnerClass"
android:enabled="true"
android:exported="true">
<intent-filter >
<action android:name="com.xyz.abc.RESULT"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
예상대로 작동하지만 메모리 누수가 있습니다. 메모리 누수없이 정적 내부 클래스에서 외부 클래스 메서드에 액세스 할 필요가. 외부 클래스의 정적 인스턴스를 사용하지 않아야합니다.
누군가 내부 클래스에서 outerClass methodX에 액세스하는 방법을 찾도록 도와 주시면 정말 고맙게 생각합니다.
'Something '이 무엇인지에 따라 달라집니다.'Application' 클래스 인 경우 외부 클래스 인스턴스에 문제가 없어야합니다 ... 'Activity' 또는'Fragment' 인 경우 해당 코드가 생성하지 않습니다. Active/Fragment가 InnerClass를 만들 때 존재하지 않을 수도 있습니다. – Selvin
궁극적으로 Activity가 확장됩니다. –
두 번째 BroadcastReceiver를 onCreate의 비 정적 ... 등록으로 사용하고 onStop에서 등록을 취소합니다 (누수가 없으므로). . 그리고 귀하의 1st BroadcastReceiver의 onReceive에서 브로드 캐스트를 보내십시오. 결국 같은 목적으로 이벤트 버스를 사용할 수 있습니다. – Selvin