日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

应用层的AIDL用法(原)

發布時間:2025/3/15 ChatGpt 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 应用层的AIDL用法(原) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是AIDL服務


  一般創建的服務并不能被其他的應用程序訪問。為了使其他的應用程序也可以訪問本應用程序提供的服務,Android系統采用了遠程過程調用(Remote Procedure Call,RPC)方式來實現。與很多其他的基于RPC的解決方案一樣,Android使用一種接口定義語言(Interface Definition Language,IDL)來公開服務的接口。因此,可以將這種可以跨進程訪問的服務稱為AIDL(Android Interface Definition Language)服務。


二、AIDL基本語法


  AIDL使用簡單的語法來聲明接口,描述其方法以及方法的參數和返回值。這些參數和返回值可以是任何類型,甚至是其他AIDL生成的接口。
  其中對于Java編程語言的基本數據類型 (int, long, char, boolean,String,CharSequence)集合接口類型List和Map,不需要import 語句。
  而如果需要在AIDL中使用其他AIDL接口類型,需要import,即使是在相同包結構下。AIDL允許傳遞實現Parcelable接口的類,需要import
  需要特別注意的是,對于非基本數據類型,也不是String和CharSequence類型的,需要有方向指示,包括in、out和inout,in表示由客戶端設置,out表示由服務端設置,inout是兩者均可設置。

  AIDL只支持接口方法,不能公開static變量。


三、遠程服務端的創建過程


3.1、簡要步驟

  1、在Eclipse Android工程的Java包目錄中建立一個擴展名為A.aidl的文件,并寫下需要的接口。如果aidl文件的內容是正確的,ADT會在gen目錄下自動生成一個A.Java接口文件。
  2、建立一個服務類(Service的子類)。并在創建的服務類中創建一個內部類,實現由aidl文件生成的Java接口。
  3、在服務類的onBind方法返回時,將實現aidl接口的內部類對象返回出去。
  4、在AndroidManifest.xml文件中配置AIDL服務,尤其要注意的是,<action>標簽中android:name的屬性值就是客戶端要引用該服務的ID,也就是Intent類的參數值。

3.2、具體操作

3.2.1、創建文件IMyService.aidl:

? ? ? ??
  文件內容:

[java]?view plaincopy
  • package?du.pack;??
  • interface?IMyService{??
  • ????//只有一個接口??
  • ????String?getValue();??
  • }??

  • 3.2.2、創建服務類及實現內部類

    [java]?view plaincopy
  • public?class?MyService?extends?Service?{??
  • ??
  • ????@Override??
  • ????public?IBinder?onBind(Intent?arg0)?{??
  • ????????//?把內部類的對象返回給客戶端使用??
  • ????????return?new?MyServiceImpl();??
  • ????}??
  • ??
  • ????//?創建一個繼承自IMyService.Stub的內部類??
  • ????public?class?MyServiceImpl?extends?IMyService.Stub?{??
  • ??
  • ????????//?必須實現AIDL文件中的接口??
  • ????????public?String?getValue()?throws?RemoteException?{??
  • ????????????return?null;??
  • ????????}??
  • ????}??
  • }??
  •   注意,我們寫的service中,onBind方法必須返回MyServiceImpl類的對象實例,否則客戶端無法獲得服務對象。

    3.2.3、在AndroidManifest.xml文件中配置MyService類

    [html]?view plaincopy
  • <service?android:name=".MyService"?>??
  • ????<intent-filter>??
  • ????????<action?android:name="du.pack.IMyService"?/>??
  • ????</intent-filter>??
  • </service>??
  •   上面的"du.pack.IMyService"是客戶端用于訪問AIDL服務的ID。


    四、本地客戶端的使用方法


    4.1、新建一個Eclipse Android工程,并將剛才遠程服務端自動生成的gen目錄下面的IMyService.java文件連同包目錄一起復制到客戶端工程的src目錄中。

    ? ? ? ??

    4.2、調用AIDL服務首先要綁定服務,然后才能獲得服務對象。

    [java]?view plaincopy
  • public?class?AidlClientTestActivity?extends?Activity?{??
  • ????//?遠程服務端的對象??
  • ????IMyService?mIMyService;??
  • ????private?ServiceConnection?mConnection?=?new?ServiceConnection()?{??
  • ??
  • ????????public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{??
  • ????????????//?綁定成功,得到遠程服務端的對象,目標完成!!!??
  • ????????????mIMyService?=?IMyService.Stub.asInterface(service);??
  • ????????}??
  • ??
  • ????????public?void?onServiceDisconnected(ComponentName?name)?{??
  • ????????????//?解除綁定??
  • ????????????mIMyService?=?null;??
  • ????????}??
  • ??
  • ????};??
  • ??
  • ????@Override??
  • ????public?void?onCreate(Bundle?savedInstanceState)?{??
  • ????????super.onCreate(savedInstanceState);??
  • ????????setContentView(R.layout.main);??
  • ??
  • ????????//?綁定遠程服務端服務??
  • ????????Intent?serviceIntent?=?new?Intent("du.pack.IMyService");??
  • ????????bindService(serviceIntent,?mConnection,?Context.BIND_AUTO_CREATE);??
  • ????}??
  • }??

  • 五、用法小結


      根據上面的操作我們先來回顧一下整個調用的過程:
      服務端方面:將需要開放的接口抽象到aidl文件中,然后在自己的內部類中對接口進行實現,并在自己被綁定的時候把內部類對象返回給客戶端。

      客戶端方面:當我們需要遠程某個Service時,就像在綁定本地的Service一樣去bindService,然后在綁定成功的回調函數中(也就是onServiceConnected方法)得到一個Ibinder對象(比如Service),這時調用IMyService.Stub.asInterface(service)這樣的語句,就可以得到服務端開放的interface接口對象,此時客戶端可以直接調用這個對象的方法,猶如直接調用遠程的Service對象一般。


    原文地址:http://blog.csdn.net/u010961631/article/details/9284765


    總結

    以上是生活随笔為你收集整理的应用层的AIDL用法(原)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。