查找ContentResolver.notifyChange的调用者

时间:2013-03-14 21:22:17

标签: android android-contentresolver contentobserver

我有一项活动,用于更新保存服务配置数据的表。我正在使用SimpleCursorLoader和SupportLoaderManager来更新该Activity中的listview。我在活动的onDestroy中销毁加载器。这可能不相关,因为即使没有访问此活动,我看到的问题也会发生。

我也有一个服务,它将URI上的ContentObserver注册到上面Activity中修改的表。它读取其配置,自行设置并在Service的onCreate中的该表上注册ContentObserver。在Service的onDestroy中,该侦听器未注册。

这只是我系统中几个数据库/表中的一个。我所看到的是,当我对一个完全不同的表进行更新时,正在触发此配置URI上的ContentObserver。权威完全不同,它们与不同的SqlLite数据库交互,甚至在应用程序内的不同进程中运行。我删除了所有可能触发ContentObservers的“notifyChange”调用,但它们仍在触发。

我的问题是,有没有办法找出谁正在调用导致ContentObserver触发的notifyChange?我的应用程序之外的系统是否有任何理由通知观察者URI?我试图追踪它,但没有任何线索来自通知,我正在撞墙。

1 个答案:

答案 0 :(得分:0)

再次,距离答案只有几个小时的路程。我显然没有在我的代码中找到所有的notifyChange调用。罪犯是:

getContentResolver.notifyChange(new Uri.Builder().build(), null);

在空白的Uri上调用notify。它似乎没有在文档中注明,但我看到的行为是触发了在我的应用程序中触发的所有已注册的ContentObservers。我从那里得到那条线,现在一切都正在通知它。

我原来问题的答案是:“有没有办法找出谁在Uri上调用notifyChange?”我认为答案是“在代码中调用notifyChange更难看。除此之外,你是靠你自己。“

相关问题