【2013-10-15】Android应用开发笔记:AIDL

📅 2026/6/25 19:54:39
【2013-10-15】Android应用开发笔记:AIDL
[历史归档]本文原发布于 cstriker1407.info 个人博客内容为历史存档仅供参考。发布时间2013-10-15 标题Android应用开发笔记AIDL分类编程 / android 标签android·aidlAndroid应用开发笔记AIDL1. 新建 .aidl 文件声明通信接口2. 编写 Service实现服务端接口逻辑3. 编写客户端调用代码备注AIDLAndroid Interface Definition Language用于跨进程通信IPC。以下是基于 Demo 的使用备忘。示例代码https://github.com/cstriker1407/android/tree/master/HelloAIDL1. 新建 .aidl 文件声明通信接口packagenet.yeah.cstriker1407;interfaceIServicePlayer{voidplay();voidseekTo(intcurrent);booleansetLoop(booleanloop);}package声明需与.aidl文件所在目录一致。.aidl创建成功后工程gen目录下会自动生成对应的IServicePlayer.java。2. 编写 Service实现服务端接口逻辑publicclassMusicServiceextendsService{IServicePlayer.StubstubnewIServicePlayer.Stub(){OverridepublicbooleansetLoop(booleanloop)throwsRemoteException{Log.d(,setLoopBoolean.toString(loop));returnfalse;}OverridepublicvoidseekTo(intcurrent)throwsRemoteException{Log.d(,seekTocurrent);}Overridepublicvoidplay()throwsRemoteException{Log.d(,play);}};OverridepublicIBinderonBind(Intentarg0){returnstub;}}3. 编写客户端调用代码客户端和服务端可以放在不同工程中通过保证.aidl包名一致来通信。publicclassMainActivityextendsActivity{IServicePlayeriPlayer;privateServiceConnectionconnnewServiceConnection(){publicvoidonServiceConnected(ComponentNameclassName,IBinderservice){iPlayerIServicePlayer.Stub.asInterface(service);}publicvoidonServiceDisconnected(ComponentNameclassName){iPlayernull;}};OverrideprotectedvoidonDestroy(){super.onDestroy();unbindService(conn);}OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);bindService(newIntent(this,MusicService.class),conn,Context.BIND_AUTO_CREATE);startService(newIntent(this,MusicService.class));((Button)findViewById(R.id.button1)).setOnClickListener(newOnClickListener(){OverridepublicvoidonClick(Viewarg0){try{iPlayer.play();iPlayer.setLoop(true);iPlayer.seekTo(100);}catch(RemoteExceptione){e.printStackTrace();}}});}}备注本 Demo 部分代码参考自 android.yaohuiji.com。更复杂的 AIDL 示例后续可能补充。关于 Service 的进程隔离可参考官方文档中android:process属性的说明——以:开头时创建私有进程以小写字母开头时可创建跨应用共享进程。