何らかの理由で、私の Android ContentObserver が複数回登録されています。ContentObserver は、私のメイン アクティビティの内部クラスとして定義されています。その後、インスタンス化されて onCreate() メソッドに登録されます。
onCreate() が複数回呼び出されているだけでなく、メインのアクティビティが一般的に複数回インスタンス化されていると思います。これを防ぐために、Android マニフェストに launchMode を追加しようとしましたが、うまくいかないようです:
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
また、onCreate に登録する前に Oberserver の登録を解除しようとしましたが、メインのアクティビティの新しいインスタンスであるため、何もしないと思います。
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 がそれを修正しなかったため、次にどこに向かうべきかわかりません。
どんな助けでも大歓迎です。ありがとう