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

Android 调用unregisterContentObserver()后,Content Observer对象会发生什么变化?,android,android-contentprovider,android-contentresolver,contentobserver,Android,Android Contentprovider,Android Contentresolver,Contentobserver,使用ContentProvider管理应用程序的数据访问时,可以使用ContentObserver监视ContentProvider中的更改 要创建ContentObserver,我们需要创建一个新对象,通常在Activity的onResume()方法中。然后注册ContentObserver对象,以便在给定内容URI标识的数据发生更改时获取回调 private Google_AR_Observer googleARObserver = null; @Override public v

使用
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);
}
最后,在活动的onPause()方法中,取消注册以前注册的不再需要的
ContentObserver

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

    getContentResolver().unregisterContentObserver(googleARObserver);
}

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

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

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

如果您查看源代码,尤其是
ContentObserver
类,您将发现一个方法
releaseContentObserver()
,当您注销任何观察者时将调用该方法。此方法在内部保存
contentObserver
对象的引用(在其他内部类
Transport
中),该对象被分配给null值。因此,基本上你可以说,只要你注销它,它就会被销毁。如果你查看源代码,尤其是
ContentObserver
类,你会发现一个方法
releaseContentObserver()
,当你注销任何观察者时,它会被调用。此方法在内部保存
contentObserver
对象的引用(在其他内部类
Transport
中),该对象被分配给null值。因此,基本上你可以说,只要你注销它,它就被销毁了。

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

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