调用unregisterContentObserver()后,Content Observer对象会发生什么?

时间:2018-03-24 18:30:35

标签: android android-contentprovider android-contentresolver contentobserver

使用ContentProvider管理应用程序的数据访问时,可以使用ContentObserver来监控ContentProvider中的更改。

要创建ContentObserver,我们需要创建一个新对象,通常在Activity的onResume()方法中。然后注册ContentObserver对象,以便在给定内容URI标识的数据发生更改时获得回调。

private Google_AR_Observer googleARObserver = null;    

@Override
public void onResume() {
    super.onResume();

    googleARObserver = new Google_AR_Observer(this);
    getContentResolver().registerContentObserver(
        CONTENT_URI, 
        true, 
        googleARObserver);
}

最后,在Activity的onPause()方法中,不再需要先前注册的ContentObserver

@Override
public void onPause() {
    super.onPause();

    getContentResolver().unregisterContentObserver(googleARObserver);
}

我的问题是:取消注册后ContentObserver会发生什么?它被摧毁了吗?

3 个答案:

答案 0 :(得分:2)

ContentObserver没有什么特别之处 - 它是一个基本的Java对象。因此,如果没有更多的引用,垃圾收集器将负责销毁它。

答案 1 :(得分:1)

如果您查看源代码,尤其是ContentObserver类,您将找到一个方法releaseContentObserver(),当您取消注册任何观察者时都会调用该方法。此方法在内部保存contentObserver对象(在其他内部类Transport内)的引用,该引用被赋予 null 值。所以基本上你可以在注销后立即将其销毁

答案 2 :(得分:1)

它只是另一个Java类,当没有对类的引用时会被销毁。