我有一个更新表的活动,该表包含服务的配置数据。我正在使用SimpleCursorLoader和SupportLoaderManager来更新该活动中的列表视图。我在活动的onDestroy中销毁了加载器。这可能是不相关的,因为我看到的问题甚至在没有访问这个活动的情况下也会发生。
我还有一个服务,它将URI上的ContentObserver注册到在上面的活动中修改的表中。它读取它的配置,设置自己,并在服务的onCreate中的那个表上注册一个ContentObserver。在服务的onDestroy中,该监听程序是未注册的。
这只是我系统中的几个数据库/表中的一个。我看到的是,当我对一个完全不同的表进行更新时,此配置URI上的ContentObserver将被触发。授权机构完全不同,它们与不同的SqlLite数据库交互,甚至在应用程序内的不同进程中运行。我删除了我能找到的所有触发ContentObservers的"notifyChange“调用,但它们仍然在触发。
我的问题是,有没有办法找出是谁在调用导致ContentObserver触发的notifyChange?我的应用程序外部的系统有没有理由通知观察者URI?我试图找到它,但在不知道通知从哪里来的情况下,我撞上了一堵墙。
发布于 2013-03-15 23:32:48
再说一次,距离答案只有几个小时了。显然,我没有在代码中找到所有的notifyChange调用。违法者是:
getContentResolver.notifyChange(new Uri.Builder().build(), null);它正在对空Uri调用notify。文档中似乎没有注意到这一点,但我看到的行为是,这触发了我的应用程序中所有注册的ContentObservers。我把这行代码去掉了,现在所有的东西都在通知我们了。
我最初的问题是“有没有办法找出是谁在Uri上调用了notifyChange?”,我认为答案是“在您的代码中仔细查找对notifyChange的调用。除此之外,您要靠自己。”
https://stackoverflow.com/questions/15420469
复制相似问题