<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                **ContentResolver.java::registerContentObserver** ~~~ public final void registerContentObserver(Uri uri, booleannotifyForDescendents,ContentObserver observer){ /* 注意registerContentObserver傳遞的參數,其中: uri是客戶端設置的它所需要監聽的數據項的地址,用Uri來表示 notifyForDescendents:如果該值為true,則所有地址包含此uri的數據項發生變化時 都會觸發通知。否則只有完全符合該uri地址的數據項發生變化時才會觸發通知。以文件夾和 其中的文件為例,若uri指向某文件夾,則需設置notifyForDescendents為true。即該文件 夾下的任何文件發生變化,都需要通知監聽者。 observer是客戶端設置的監聽對象。當數據項發生變化時,該對象的onChange函數將被調用 */ try { /* 調用ContentService的registerContentObserver函數,其第三個參數是 observer.getContentObserver的返回值,它是什么呢? */ getContentService().registerContentObserver(uri, notifyForDescendents, observer.getContentObserver()); } ...... } ~~~ registerContentObserver最終將調用ContentService的registerContentObserver函數,其中第三個參數是ContentObservergetContentObserver的返回值。這個返回值是什么呢?需請出ContentObserver家族成員。 1. ContentObserver介紹 ContentObserver家族成員如圖8-1所示。 :-: ![](http://img.blog.csdn.net/20150803131336055?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) 圖8-1 ContentObserver家族類圖 圖8-1中的ContentObserver類和第7章中介紹的ContentProvider類非常類似,內部都定義了一個Transport類參與Binder通信。由圖8-1可知,Transport類從IContentObserver.stub派生。從Binder通信角度來看,客戶端進程中的Transport將是Bn端。如此,通過registerContentObserver傳遞到ContentService所在進程的就是Bp端。IContentObserverBp端對象的真實類型是IContentObserver.Stub.Proxy。 * * * * * **注意**:IContentObserver.java由aidl處理IContentObserver.aidl生成,其位置在out/targer/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core/java/android/database/IContentObserver.java中。 * * * * * 2. registerContentObserver函數分析 下面來看ContentService的registerContentObserver函數的代碼。 **ContentService.java::registerContentObserver** ~~~ public void registerContentObserver(Uri uri,boolean notifyForDescendents, IContentObserver observer) { ...... synchronized (mRootNode) { //ContentService要做的事情其實很簡單,就是保存uri和observer的對應關系到 //其內部變量mRootNode中 mRootNode.addObserverLocked(uri, observer, notifyForDescendents, mRootNode, Binder.getCallingUid(), Binder.getCallingPid()); } ~~~ mRootNode是ContentService的成員變量,其類型為ObserverNode。ObserverNode的組織形式是數據結構中的樹,其葉子節點的類型為ObserverEntry,它保存了uri和對應的IContentObserver對象。本節不關注它們的內部實現,讀者若有興趣,不妨自行研究。 至此,客戶端已經為某數據項設置了ContentObserver。再來看通知機制實施的第二步,即通知觀察者。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看