ContentObserverにonChange通知される基準について調査しました。
結果、
登録したURIへのnotifyChangeに加えて、親パスへのnotifyChangeもトリガとなる
です。
また、ContentObserver登録時の引数notifyForDescendentsにtrueを指定すると、
登録したURIの子や孫にあたるパスへのnotifyChangeもトリガになる
ことがわかりました。
⇒notifyForDescendentsについて:android developers
下記は調査で使用したデータ。
次のURIを監視するContentObserverを登録。
監視URI = content://yuki.contentobserver/lv0
監視URI = content://yuki.contentobserver/lv0/lv1
監視URI = content://yuki.contentobserver/lv0/lv1/lv2
監視URI = content://yuki.contentobserver/lv1/lv0
監視URI = content://yuki.contentobserver/lv2/lv1/lv0
いくつかのURIにnotifyChangeして、上記ContentObserverにonChange通知されるかを検証
(結果の見方は ○:onChange通知あり/×:onChange通知なし です)
ContentObserver登録時、notifyForDescendentsに"false"を指定した場合
content://yuki.contentobserver/lv0 にnotifyChangeすると...
○:監視URI = content://yuki.contentobserver/lv0
○:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
content://yuki.contentobserver/lv0/lv1 にnotifyChangeすると...
×:監視URI = content://yuki.contentobserver/lv0
○:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
content://yuki.contentobserver/lv0/lv1/lv2 にnotifyChangeすると...
×:監視URI = content://yuki.contentobserver/lv0
×:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
ContentObserver登録時、notifyForDescendentsに"true"を指定した場合
content://yuki.contentobserver/lv0 にnotifyChangeすると...
○:監視URI = content://yuki.contentobserver/lv0
○:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
content://yuki.contentobserver/lv0/lv1 にnotifyChangeすると...
○:監視URI = content://yuki.contentobserver/lv0
○:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
content://yuki.contentobserver/lv0/lv1/lv2 にnotifyChangeすると...
○:監視URI = content://yuki.contentobserver/lv0
○:監視URI = content://yuki.contentobserver/lv0/lv1
○:監視URI = content://yuki.contentobserver/lv0/lv1/lv2
×:監視URI = content://yuki.contentobserver/lv1/lv0
×:監視URI = content://yuki.contentobserver/lv2/lv1/lv0
以上です。