我正在开发一个Android应用程序,并且第一次使用内容观察者。所以我阅读了很多教程,并得到了为什么提供它以及如何使用它的概念。
现在我已在博客
上阅读了这些内容别忘了取消注册内容观察员
所以,我无法理解我是否想要注册一个ContentObserver
那么我可能需要取消注册的情况。
如果观察者的目的得到满足,那么它可以取消注册。但我必须观察直到用户卸载应用程序,然后我将取消注册观察者。
以下是该博客的网址
http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/
答案 0 :(得分:14)
onCreate
注册观察员,则在[{1}} onDestroy
注册观察员,则在[{1}} onStart
注册观察员,则在[{1}} 由于只能同时显示一个活动,我建议使用最后一个选项。
答案 1 :(得分:6)
请阅读您提供的链接,并明确提及
您在onResume()生命周期方法中注册观察者,并在onPause()方法中取消注册。
一旦你注销了其中一个方法,它就不会observe
任何值,也不会给任何memory leak
。
@override
public void onDestroy()
{
getContentResolver().
unregisterContentObserver(yourObserver);
}
或者你也可以这样做
@override
public void onPause()
{
getContentResolver().
unregisterContentObserver(yourObserver);
}
答案 2 :(得分:5)
想象一下,你有一个应用程序可以说是使用FriendListActivity
创建的朋友列表屏幕。现在,要为此活动创建UI,您可以从数据库中读取数据并创建UI。
现在假设您还有一个在后台运行的服务,并使用Web服务将该数据库与远程数据库同步。
现在,只要服务更新了数据库中的好友列表,您也需要相应地更新UI。因此,要实现此目的,您将在FriendListActivity
为朋友Activity
启动URI
时注册内容观察者(假设知道URI
的概念),以便每当数据库中的好友列表发生变化时,您还会更新FriendListActivity
中的好友列表。现在,如果用户退出您的活动或关闭应用程序,那么您不需要更新UI(因此您不需要获取更改数据库的事件),因此您将取消注册内容观察者。
现在,当用户下次访问此屏幕时,您将再次获取最新数据并向DB注册以进行内容更改...
因此内容观察者通常是活动和数据库(或特定URI)之间的关系。那么你会在Activity
启动时注册它,并在活动离开视图时取消注册它。
希望这会有所帮助......
答案 3 :(得分:3)
在博文中,它指出:
当您注册了内容观察者时,您还有责任取消注册。否则你会创建一个内存泄漏,你的Activity永远不会被垃圾收集。
因此,当您的Activity
关闭时,您应取消注册 - 这应该在onPause
方法中完成。只要您离开onPause
,就会随时调用Activity
。
查看Activities
:http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle