0

我有一个更新包含服务配置数据的表的活动。我正在使用 SimpleCursorLoader 和 SupportLoaderManager 来更新该 Activity 中的列表视图。我在活动的 onDestroy 中销毁了加载程序。这可能不相关,因为即使没有访问此活动,我看到的问题也会发生。

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

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

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

4

1 回答 1

0

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

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

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

我最初的问题的答案,“有没有办法找出谁在 Uri 上调用了 notifyChange?”,我认为答案是“在你的代码中更努力地寻找 notifyChange 的调用。除此之外,你自己。”

于 2013-03-15T15:32:47.617 回答