停止Android ContentObserver多次注册

时间:2011-04-22 19:52:25

标签: android contentobserver

由于某些原因,我的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没有修复它,我不知道下一步该转向。

非常感谢任何帮助。感谢

2 个答案:

答案 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 如果需要,你可以用单身人士解决其中的一些问题(我怀疑)。