由于某些原因,我的Android ContentObserver正在多次注册。 ContentObserver被定义为我的主Activity中的内部类。然后在我的onCreate()方法中对其进行实例化和注册。
我认为onCreate()被多次调用,以及我的主Activity一般被多次实例化。为了防止这种情况,我尝试将launchMode添加到我的Android Manifest中,但它似乎没有用:
<activity android:name=".MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance">
在我的onCreate注册之前,我也尝试取消注册Oberservers,但我认为因为它是我的主Activity的新实例,所以它什么也没做。
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
}
}
关于如何防止这种情况发生的任何想法?我还在我的主Activity中创建了一个runnable和一个处理程序,我已经设置为定期运行,这也遇到了同样的问题。理想情况下,修复也可以解决这个问题。我很确定潜在的问题是我的主Activity被多次实例化,但由于launchMode没有修复它,我不知道下一步该转向。
非常感谢任何帮助。感谢
答案 0 :(得分:2)
使用此:
@Override
protected void onCreate()
{
myObserver = new MyObserver(contentResolver);
getContentResolver().registerContentObserver(
MainActivity.myObserveUri, true, myObserver);
}
@Override
protected void onPause()
{
getContentResolver().unregisterContentObserver(myObserver);
}
@Override
protected void onResume()
{
getContentResolver().registerContentObserver(
MainActivity.myObserveUri, true, myObserver);
}
答案 1 :(得分:1)
你需要掌握潜在的问题,即Android Activity lifecycle 如果需要,你可以用单身人士解决其中的一些问题(我怀疑)。