遠(yuǎn)程服務(wù)

把接口java文件的后綴名改成aidl# 遠(yuǎn)程服務(wù)

  • 本地服務(wù):指的是服務(wù)和啟動(dòng)服務(wù)的activity在同一個(gè)進(jìn)程中
  • 遠(yuǎn)程服務(wù):指的是服務(wù)和啟動(dòng)服務(wù)的activity不在同一個(gè)進(jìn)程中

遠(yuǎn)程服務(wù)的啟動(dòng)

服務(wù)和活動(dòng)類似,均有顯示啟動(dòng)和隱式啟動(dòng)。而遠(yuǎn)程服務(wù)的啟動(dòng)只能通過顯示啟動(dòng)

  • 服務(wù)的注冊

    <service android:name="com.example.android_service.RemoteService">
        <!--支持隱式啟動(dòng)的服務(wù)需配置intent-filter標(biāo)簽-->
        <intent-filter >
            <action android:name="com.itheima.remote"/>
        </intent-filter>
    </service>
    
  • 啟動(dòng)遠(yuǎn)程服務(wù)

    //匹配action內(nèi)容
    Intent intent = new Intent("com.itheima.remote");
    startService(intent);
    

啟動(dòng),綁定,解綁,關(guān)閉遠(yuǎn)程服務(wù)的方法和操作本地服務(wù)的方法一樣

和遠(yuǎn)程服務(wù)進(jìn)行通信

進(jìn)程間通信使用的機(jī)制是:AIDL(Android interface definition language)

操作步驟:
1. 把遠(yuǎn)程服務(wù)的方法抽取成一個(gè)單獨(dú)的接口java文件
2. 把接口java文件的后綴名改成aidl xxx.java ---> xxx.aidl
3. 在gen目錄中會(huì)自動(dòng)生成的xxx.java文件中,內(nèi)部有一個(gè)靜態(tài)抽象類Stub,它已經(jīng)繼承了Binder類,實(shí)現(xiàn)了抽取出來的服務(wù)接口,這個(gè)類就是新的中間人
4. 在遠(yuǎn)程服務(wù)類中,定義一個(gè)內(nèi)部類繼承靜態(tài)抽象類Stub,實(shí)現(xiàn)其需要實(shí)現(xiàn)的方法,在服務(wù)綁定時(shí),返回此內(nèi)部類的對(duì)象
5. 把a(bǔ)idl文件復(fù)制粘貼到啟動(dòng)遠(yuǎn)程服務(wù)的項(xiàng)目中,粘貼的時(shí)候注意,aidl文件所在的包名必須原aidl所在的包名一致
6. 在啟動(dòng)遠(yuǎn)程服務(wù)的項(xiàng)目中,強(qiáng)轉(zhuǎn)中間人對(duì)象時(shí),直接使用Stub.asInterface()

Stub.asInterface(service);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容