Android AIDL實(shí)現(xiàn)跨進(jìn)程通信的示例代碼
AIDL是Android接口定義語(yǔ)言,它可以用于讓某個(gè)Service與多個(gè)應(yīng)用程序組件之間進(jìn)行跨進(jìn)程通信,從而可以實(shí)現(xiàn)多個(gè)應(yīng)用程序共享同一個(gè)Service的功能。
實(shí)現(xiàn)步驟
例:用 A程序去訪問(wèn) B程序的MyService.java服務(wù)
- 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里寫我們的接口方法
- 在MyService中寫AIDL文件定義的方法的具體服務(wù)邏輯
- 在B的manifest文件中,為Service添加action “com.xyb.servicetest.MyAidlService” 用于A靜態(tài)來(lái)訪問(wèn)Service(這里是因?yàn)?,如果用?dòng)態(tài)Intent (this, MyService.class), 在A中沒(méi)有MyService這個(gè)類)
- 把B的AIDL文件夾拷貝到A中,一定要注意包的路徑依然為B中的路徑
- 在A中利用靜態(tài)Intent來(lái)啟動(dòng)B的服務(wù)MyService
對(duì)應(yīng)步驟詳細(xì)代碼:
MyAidlService.AIDL
interface MyAidlService { int add(int a, int b); }
MyService.Java
public class MyService extends Service{ MyAidlService.Stub mBinder = new MyAidlService.Stub() { @Override public int add(int a, int b) throws RemoteException { return a + b; } }; @Override public IBinder onBind(Intent intent) { return mBinder; } @Override public void onCreate() { super.onCreate(); } @Override public void onDestroy() { super.onDestroy(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } }
3.添加action
<service android:name=".MyService"> <intent-filter> <action android:name="com.xyb.servicetest.MyAidlService"/> </intent-filter> </service>
4.拷貝AIDL文件夾
5.A訪問(wèn)B的服務(wù)
Intent intent = new Intent("com.xyb.servicetest.MyAidlService"); bindService(intent, connection, BIND_AUTO_CREATE);
private MyAidlService aidlService;
private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.d("onServiceConnected", "onServiceConnected"); aidlService = (MyAidlService) MyAidlService.Stub.asInterface(service); try { int sum = aidlService.add(10, 50);//對(duì)10和50相加 Log.d("onServiceConnected", sum + ""); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 詳解Android跨進(jìn)程通信之AIDL
- Android實(shí)現(xiàn)跨進(jìn)程接口回掉的方法
- Android AIDL實(shí)現(xiàn)兩個(gè)APP間的跨進(jìn)程通信實(shí)例
- android使用AIDL跨進(jìn)程通信(IPC)
- 詳解Android跨進(jìn)程IPC通信AIDL機(jī)制原理
- Android 跨進(jìn)程SharedPreferences異常詳解
- Android 跨進(jìn)程通Messenger(簡(jiǎn)單易懂)
- Android編程實(shí)現(xiàn)AIDL(跨進(jìn)程通信)的方法詳解
- Android應(yīng)用程序四大組件之使用AIDL如何實(shí)現(xiàn)跨進(jìn)程調(diào)用Service
- 分析CmProcess跨進(jìn)程通信的實(shí)現(xiàn)
相關(guān)文章
VerticalBannerView仿淘寶頭條實(shí)現(xiàn)垂直輪播廣告
這篇文章主要為大家詳細(xì)介紹了VerticalBannerView仿淘寶頭條實(shí)現(xiàn)垂直輪播廣告,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08Android RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載
這篇文章主要介紹了Android RecyclerView實(shí)現(xiàn)下拉刷新和上拉加載的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05java從輸入流中獲取數(shù)據(jù)并返回字節(jié)數(shù)組示例
這篇文章主要介紹了java從輸入流中獲取數(shù)據(jù)并以字節(jié)數(shù)組返回,這是一個(gè)常用的方法,以后可以直接拿來(lái)用。這種輸入流可以來(lái)自Android本地,也可以來(lái)自網(wǎng)絡(luò)2014-01-01android基礎(chǔ)教程之開(kāi)機(jī)啟動(dòng)示例
這篇文章主要介紹了android開(kāi)機(jī)啟動(dòng)示例,開(kāi)機(jī)自動(dòng)啟動(dòng)程序后開(kāi)機(jī)啟動(dòng)廣播功能實(shí)現(xiàn),需要的朋友可以參考下2014-02-02Android自定義UI手勢(shì)密碼簡(jiǎn)單版
這篇文章主要為大家詳細(xì)介紹了Android自定義UI手勢(shì)密碼簡(jiǎn)單版2016-10-10Android音視頻開(kāi)發(fā)之MediaPlayer使用教程
Android多媒體框架支持播放提供了MediaPlayerAPI,可以通過(guò)MediaPlayer來(lái)實(shí)現(xiàn)媒體文件播放??梢哉f(shuō)MediaPlayer是非常方便使用的多媒體播放器。本文將詳細(xì)講解MediaPlayer的使用,需要的可以參考一下2022-04-04gradle配置國(guó)內(nèi)鏡像的實(shí)現(xiàn)
這篇文章主要介紹了gradle配置國(guó)內(nèi)鏡像的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09