有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么以及何时在安卓中注销内容观察员

我正在开发一个安卓应用程序,第一次与内容观察者合作。所以我读了很多教程,了解了为什么要提供它以及如何使用它

现在我在一个博客上读到了这些话

Dont forget to unregister content observers

因此,我无法理解如果我想注册一个ContentObserver,那么在什么情况下我必须注销它

如果观察者的目的得到了实现,那么就可以取消注册了。但我必须观察,直到用户卸载应用程序,然后我为什么要取消注册观察员

这是那个博客的url

http://www.grokking安卓.com/use-contentobserver-to-listen-to-changes/


共 (4) 个答案

  1. # 1 楼答案

    请阅读你提供的链接,清楚地提到

    在onResume()生命周期方法中注册观察者,然后在onPause()方法中注销观察者

    一旦你注销它,这些方法的一个。它不会observe任何值,也不会给出任何memory leak

      @override
    
        public void onDestroy()
        {
    
    getContentResolver().
          unregisterContentObserver(yourObserver);
    
        }
    

    或者你也可以这样做

     @override
    
        public void onPause()
        {
        getContentResolver().
      unregisterContentObserver(yourObserver);
    
        }
    
  2. # 2 楼答案

    在博客文章中,它指出:

    When you have registered a content observer, it is your responsibility to also unregister it. Otherwise you would create a memory leak and your Activity would never be garbage collected.

    因此,当Activity关闭时,应该取消注册-这应该在onPause方法中完成^无论何时你离开你的Activity,总是会调用{}

    检查Activities:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle的生命周期

  3. # 3 楼答案

    假设您有一个应用程序,它使用FriendListActivity创建了一个朋友列表屏幕。现在要创建此活动的UI,请从DB读取数据并创建UI

    现在,假设您还有一个在后台运行的服务,该服务使用web服务将此数据库与远程数据库同步

    现在,每当服务更新数据库中的好友列表时,您也希望相应地更新您的UI。因此,为了实现这一点,您需要在为好友URI启动Activity时在FriendListActivity中注册内容观察者(假设您知道URI的概念),这样每当数据库中的好友列表发生变化时,您也会更新FriendListActivity中的好友列表。现在,如果用户退出了您的活动或关闭了应用程序,则您无需更新UI(因此无需获取DB更改的事件),因此您可以注销content observer

    现在,用户下次来到这个屏幕时,您将再次获取最新数据并向DB注册内容更改

    因此,内容观察者通常是活动和数据库(或特定URI)之间的关系。因此,您可以在启动Activity时注册它,并在活动退出视图时取消注册它

    希望这有助于

  4. # 4 楼答案

    请看一下activity lifecycle

    Activity lifecycle

    • 如果您在onCreate中注册了一个观察者,那么您将在onDestroy中取消注册
    • 如果您在onStart中注册了一个观察者,那么您将在onStop中取消注册
    • 如果您在onResume中注册了一个观察者,那么您将在onPause中取消注册

    由于同一时间只能显示一个活动,我建议使用最后一个选项