出於某種原因,我的Android ContentObserver被多次註冊。 ContentObserver在我的主Activity中被定義爲內部類。然後在我的onCreate()方法中實例化並註冊。停止Android ContentObserver多次註冊
我認爲,多次調用onCreate(),以及我的主要活動一般被多次實例化。爲了防止這種情況,我已經試過加入launchMode我的Android清單,但它似乎並沒有工作過:
<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
}
}
有關如何防止這種情況發生的任何想法?我還有一個runnable和一個在我的主Activity中創建的處理程序,我已經設置了定期運行,這也遇到了同樣的問題。理想情況下,修復也可以解決這個問題。我很確定,潛在的問題是我的主要Activity不止一次實例化,但由於launchMode沒有修復它,我不確定接下來要轉向哪裏。
任何幫助,非常感謝。謝謝
觀察員是爲了我的主要活動無限期地運行下去,我從來沒有調用finish()。這是否意味着創造新活動的唯一方式是系統是否暫時摧毀舊系統?如果是這樣,我想我可以在onDestroy()中取消註冊我的ContentObserver,然後不久之後它將在onCreate()中重新註冊。這會工作嗎?我想我寧願保留我的初始觀察員,並停止創建其他人。 – Colin 2011-04-22 20:17:42
非常廣泛的主題... onDestroy()/ onCreate()出現各種原因 - 橫向到縱向移動(如果您的應用程序/視圖允許),操作系統內存回收... 你真的需要知道底層框架。 – Dan 2011-04-22 20:21:50