遠程服務(wù)

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

  • 本地服務(wù):指的是服務(wù)和啟動服務(wù)的activity在同一個進程中
  • 遠程服務(wù):指的是服務(wù)和啟動服務(wù)的activity不在同一個進程中

遠程服務(wù)的啟動

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

  • 服務(wù)的注冊

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

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

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

和遠程服務(wù)進行通信

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

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

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

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

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