0
我一直在ICS的框架中紮根,並且似乎Android插件提供程序中的ContactsProvider2在插入/更新後調用 notifyChange,不僅如此,它由:Android ContentObserver - 聯繫人 - 無在線更新
NotifyChange(ContactsContract.AUTHORITY_URI, null, syncToNetwork);
這意味着,任何插入/更新/刪除聯繫人AUTHORITY烏里觸發內容觀察家得到更新。雖然在理論上,這是非常好的。它似乎也是通過Presence更新來觸發的。
如果我嘗試在數據表上拖動光標,它也會將數據錶鏈接到狀態,並且狀態的任何更新都有onLoadFinished被調用(CursorLoader)。
展望光標的問題,它看起來是因爲ContactsProvider2調用
setTablesAndProjectionMapForData()
這又追加Presnce(在線)/狀態欄,每一個數據行。
appendContactPresenceJoin(sb, projection, RawContacts.CONTACT_ID);
appendContactStatusUpdateJoin(sb, projection, ContactsColumns.LAST_STATUS_UPDATE_ID);
appendDataPresenceJoin(sb, projection, DataColumns.CONCRETE_ID);
appendDataStatusUpdateJoin(sb, projection, DataColumns.CONCRETE_ID);
有什麼辦法可以註冊一個內容觀察者獲取數據表上的更新改變w/out實際上獲取更新的存在改變嗎?我相信過去從2.3/3.x中的Data.CONTENT_URI查詢中排除了存在。但是看起來它已經改變了..
不要以爲這會起作用,因爲這引用了單個聯繫人。我的問題是在企業環境中。有點難以解釋,但我們有一個提供者異步聚合來自關閉和設備資源的多個結果,每次返回它就會通知一個改變。對於設備,我們通過光標加載器訪問了這個列表。但通知更新將保持流入,並導致我們嘗試重新與其他數據在數據庫合併..過於複雜的用例,我不記得我們現在所做的解決方案.. – Chrispix 2015-08-21 15:27:35