<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                在socket編程中,當一個socket 關閉后,我們無比希望另一端的select/poll/epoll/WaitForXXX有相應返回,以示通知。 說明:在廣域網中,我們常常會因為收不到或者延時收到socket的close消息而煩惱。 在Binder系統中,要是明確表示對BnXXX的生死非常關心,那么在它離世后你會收到一份訃告。你可以嚎啕大哭,或者什么也不做。 關于這個問題,請直接看源碼中的例子吧。 1. 表達你的關心 要想收到訃告,必須先要表達你的關心:做下面兩件事: - 從IBinder::DeathRecipient派生一個類,并實現其中的通知函數binderDied。這個函數一旦被調用,就相當于你收到了訃告。 - 把這個類注冊到系統,告訴你關心哪一個BnXXX的生死。 看示例代碼,它在MediaMetadataRetriever.cpp中,如下所示: **MediaMetadataRetriever.cpp** ~~~ const sp<IMediaPlayerService>&MediaMetadataRetriever::getService() { Mutex::Autolock lock(sServiceLock); if(sService.get() == 0) { sp<IServiceManager> sm = defaultServiceManager(); sp<IBinder> binder; do { binder = sm->getService(String16("media.player")); if (binder != 0) { break; } usleep(500000); // 0.5 s }while(true); if(sDeathNotifier == NULL) { sDeathNotifier = new DeathNotifier(); } //調用下面這個函數,告訴系統我們對這個binder的生死有興趣 //這個binder是一個BpBinder,它關心的是對端BBinder,也即是BnXXX的父類。 binder->linkToDeath(sDeathNotifier); sService = interface_cast<IMediaPlayerService>(binder); } returnsService; } ~~~ 2. 訃告是怎么收到的? 那么,這份訃告是怎么收到的呢?答案也在executeCommand中,代碼如下所示: **IPCThreadState.cpp** ~~~ status_t IPCThreadState::executeCommand(int32_t cmd) { BBinder*obj; RefBase::weakref_type* refs; status_tresult = NO_ERROR; switch(cmd) { caseBR_ERROR: result = mIn.readInt32(); break; ...... caseBR_DEAD_BINDER: { //Binder驅動會通知死亡消息。下面的proxy對應著已經死亡的遠端BBinder。 BpBinder *proxy =(BpBinder*)mIn.readInt32(); //發送訃告,Obituary是訃告的意思。最終會傳遞到你的DeathNotifier中。 proxy->sendObituary(); mOut.writeInt32(BC_DEAD_BINDER_DONE); mOut.writeInt32((int32_t)proxy); }break; default: result = UNKNOWN_ERROR; break; } ~~~ 3. 你死了,我怎么辦? 收到訃告后該怎么辦呢?有一些代碼看起來非常薄情寡義,如下所示: **MediaMetadataRetriever.cpp** ~~~ /* DeathNotifier是MediaMetadataRetriever的內部類,前面在getService函數中 我們注冊了它對BnMediaPlayerService的關心。 */ voidMediaMetadataRetriever::DeathNotifier::binderDied(const wp<IBinder>&who) { Mutex::Autolock lock(MediaMetadataRetriever::sServiceLock); //把自己保存的BpMediaPlayerService對象干掉! MediaMetadataRetriever::sService.clear(); LOGW("MediaMetadataRetriever serverdied!");//打印一下LOG,這樣就完事大吉了。 } ~~~ 4. 承受不住的諾言 我答應收到訃告后給你送終,可是如果我要是死在你前面或者中途我不想接收訃告,又該怎么辦呢?先來看下面的代碼: **MediaMetadataRetriever.cpp** ~~~ MediaMetadataRetriever::DeathNotifier::~DeathNotifier() { Mutex::Autolocklock(sServiceLock); // DeathNotifier對象不想活了,但是BnMediaPlayerService還活著, // 或者DeathNotifier中途變卦。怎么辦? //unlinkToDeath調用可以取消對BnMediaPlayerService的關心。 if(sService != 0) { sService->asBinder()->unlinkToDeath(this); } } ~~~ Binder的這個訃告是不是很有人情味呢?想知道它是怎么做到的嗎?還是先去看看驅動的實現吧。
                  <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>

                              哎呀哎呀视频在线观看