<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                純Native的Service表示我們的代碼都在Native層。Native層有很多service,前面的MS不就是一個重量級的嗎? 假設service叫Test,我們該如何實現呢?完全可以模仿MS!具體實現過程,如代碼所示: **Test.cpp::范例** ~~~ int main() { sp<ProcessState>proc(ProcessState::self()); sp<IServiceManager> sm =defaultServiceManager(); //記住注冊你的服務,否則誰也找不著你! sm->addService(“service.name”,newTest()); //如果壓力不大,可以不用單獨搞一個線程。 ProcessState::self()->startThreadPool(); //這個是必需的,否則主線程退出了,你也完了。 IPCThreadState::self()->joinThreadPool(); } ~~~ Test是怎么定義的呢?我們是跨進程的C/S,所以本地需要一個BnTest,對端需要提供一個代理BpTest。為了不暴露Bp的身份,Bp的定義和實現都放在BnTest.cpp中好了。 注意:你雖可以暴露Bp的身份(輸出它的頭文件),但也沒有必要,因為客戶端用的是基類ITest指針。 1. 我能干什么 ITest接口表明它所提供的服務,例如getTest和setTest等,這個與業務邏輯相關,代碼如下所示: 說明:getTest也可以返回一個ITestService類型的Service! **ITest.h::聲明ITest** ~~~ /需要從IInterface派生 class ITest: public IInterface { public: //神奇的宏 DECLARE_META_INTERFACE DECLARE_META_INTERFACE(Test); virtualvoid getTest() = 0; virtual voidsetTest() = 0; }//ITest是一個接口類。 ~~~ 2. 定義BnTest和BpTest 為了把ITest融入到Binder系統,需要定義BnTest和對客戶端透明的BpTest。BnTest定義既可以與上面的Test定義放在一塊,也可以分開,如下所示: **ITest.h::聲明BnTest** ~~~ class BnTest: public BnInterface<ITest> { public: //由于ITest是個純虛類,而BnTest只實現了onTransact函數,所以BnTest依然是一個純虛類 virtualstatus_t onTransact( uint32_t code, constParcel& data, Parcel*reply, uint32_t flags = 0); }; ~~~ 另外,我們還要使用IMPLEMNT宏。參考BnMediaPlayerService的方法,把BnTest和BpTest的實現都放在ITest.cpp中,如下所示: **ITest.cpp::BnTest的實現** ~~~ IMPLEMENT_META_INTERFACE(Test, "android.Test.ITest");//IMPLEMENT宏 status_t BnTest::onTransact( uint32_tcode, const Parcel& data, Parcel* reply, uint32_t flags) { switch(code) { case GET_Test:{ CHECK_INTERFACE(ITest, data, reply); getTest();//子承父業,由Test完成。 return NO_ERROR; }break; //SET_XXX類似 ~~~ BpTest也在這里實現吧,如下所示: **ITest.cpp::BpTest的實現** ~~~ class BpTest: public BpInterface<ITest> { public: BpXXX(const sp<IBinder>& impl) :BpInterface< ITest >(impl) { } vitural getTest() { Parcel data, reply; data.writeInterfaceToken(ITest::getInterfaceDescriptor()); data.writeInt32(pid); //打包請求數據,然后交給BpBinder通訊層處理。 remote()->transact(GET_Test, data, &reply); return; } //setTest類似 ~~~ 純Native的Service寫起來量大一些,上面的代碼還只是把C/S的框架寫好了,真實的業務處理尚未開始,不過感覺卻很踏實,很厚重。那么,Java層的Service該怎么寫呢?
                  <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>

                              哎呀哎呀视频在线观看