몇 가지 이유로 안드로이드 ContentObserver가 여러 번 등록되고 있습니다. ContentObserver는 내 주요 활동의 내부 클래스로 정의됩니다. 그런 다음 내 onCreate() 메소드에 인스턴스화되고 등록됩니다.Android ContentObserver를 여러 번 등록하지 못하도록
나는에서 onCreate()를 여러 번 인스턴스화하는 것을 일반적으로 여러 번뿐만 아니라 내 주요 활동을 호출되고 있다고 생각합니다. 이를 방지하기 위해, 내 안드로이드 매니페스트에 launchMode를 추가 해봤지만 근무하지 않는 것 :
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
나는 또한 내에서 onCreate에 등록하기 전에 Oberservers 등록을 취소하려했지만, 내가 있기 때문에 생각 그것은 내 주요 활동의 새로운 인스턴스입니다. 아무 것도하지 않습니다.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
this.contentResolver = this.getApplicationContext().getContentResolver();
this.myObserver = new MyObserver(this.contentResolver);
this.contentResolver.unregisterContentObserver(this.myObserver);
this.contentResolver.registerContentObserver(MainActivity.myObserveUri, true, this.myObserver);
}
private class MyObserver extends ContentObserver {
public MyObserver(ContentResolver contentResolver) {
super(null);
//My Code
}
}
어떻게 이런 일이 발생하지 않도록 할 수 있습니까? 또한 주기적으로 실행되도록 설정된 주요 활동에 실행 파일과 처리기가 만들어져 동일한 문제가 발생합니다. 이상적으로는 문제가 해결 될 수도 있습니다. 근본적인 문제는 내 주 활동이 한 번 이상 인스턴스화되었다는 것이 확실하지만 launchMode가 문제를 해결하지 못했기 때문에 다음에 어디로 향할 지 잘 모르겠습니다.
도움을 주시면 대단히 감사하겠습니다. 감사합니다
무기한 실행하고, 내가 마무리를 호출하지 않습니다. 즉, 시스템이 일시적으로 이전 활동을 파괴하는 경우 새로운 활동이 생성되는 유일한 방법일까요? 그렇다면 onDestroy()에서 내 ContentObserver를 등록 취소 한 다음 잠시 후 onCreate()에 다시 등록 할 수 있다고 생각합니다. 이게 효과가 있니? 저는 처음 관찰자를 지키고 추가 관찰자를 만들지 않기를 원합니다. – Colin
매우 광범위한 주제 ... onDestroy()/onCreate()는 다양한 이유로 인해 발생합니다 (가로/세로 이동 (앱/뷰에서 허용하는 경우), OS 메모리 교정 ... 정말 알아야 할 것은 기본 프레임 워크. – Dan