# AndroidAIDL **Repository Path**: jarlen/AndroidAIDL ## Basic Information - **Project Name**: AndroidAIDL - **Description**: No description available - **Primary Language**: Android - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-29 - **Last Updated**: 2024-12-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 利用android IPC AIDL技术,实现客户端与服务端通讯。 ## 概述 AIDL相关使用,主要分为三个部分 - bindService - 接口调用 - unbindService ### bindService ```java private IMsgService mUserService; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { AIDLLog.w("Client->onServiceConnected"); mUserService = IMsgService.Stub.asInterface(iBinder); } @Override public void onServiceDisconnected(ComponentName componentName) { AIDLLog.w("Client->onServiceDisconnected"); } @Override public void onBindingDied(ComponentName name) { /** *
当与该连接的绑定死亡时会调用此方法。
* 这意味着接口将永远不会收到另一个连接。应用程序需要取消绑定并重新绑定该连接以重新激活它。 * 例如,如果托管服务的应用程序已更新,则可能会发生这种情况。 */ AIDLLog.w("Client->onBindingDied"); } @Override public void onNullBinding(ComponentName name) { AIDLLog.w("Client->onNullBinding"); /** *当服务的 onBind() 方法返回 null 时会调用此方法。这表明尝试绑定的服务连接将永远不会变得可用。
*应用程序必须仍然调用 Context.unbindService(ServiceConnection) 来释放与此 ServiceConnection 相关的跟踪资源;
*>即使在 Context.bindService() 调用后此回调被触发。
*/ unBindMessageService(); } }; ``` ```java Intent bindIntent = new Intent(); bindIntent.setClassName("cn.jarlen.android.aidl.server", "cn.jarlen.android.aidl.server.MessageService"); bindService(bindIntent, connection, BIND_AUTO_CREATE); ``` ### unbindService ```java unbindService(connection); ``` ## Android AIDL调用方法活动周期  ```java 2024-12-09 10:58:01.916 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->bindService 2024-12-09 10:58:01.925 6203-6203/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[main,5,main]]Server->onCreate 2024-12-09 10:58:01.925 6203-6203/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[main,5,main]]Server->onBind 2024-12-09 10:58:01.936 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->onServiceConnected ``` ```java 2024-12-09 10:59:52.145 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->发消息:123456 2024-12-09 10:59:52.145 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->发消息Before 2024-12-09 10:59:52.147 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->sendMsg 2024-12-09 10:59:53.149 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->来消息啦:123456, Thread[Binder:6203_4,5,main] 2024-12-09 10:59:53.149 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->processClientMsg 2024-12-09 10:59:53.149 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->sendMsg,client not found 2024-12-09 10:59:53.149 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->发消息After ``` ```java 2024-12-09 11:00:50.105 6158-6308/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[Thread-2,5,main]]Client->发消息:123456 2024-12-09 11:00:50.105 6158-6308/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[Thread-2,5,main]]Client->发消息Before 2024-12-09 11:00:50.107 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->sendMsg 2024-12-09 11:00:51.108 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->来消息啦:123456, Thread[Binder:6203_4,5,main] 2024-12-09 11:00:51.108 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->processClientMsg 2024-12-09 11:00:51.108 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->sendMsg,client not found 2024-12-09 11:00:51.109 6158-6308/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[Thread-2,5,main]]Client->发消息After ``` ```java 2024-12-09 11:01:18.347 6158-6158/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->unbindService 2024-12-09 11:01:18.351 6203-6203/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[main,5,main]]Server->onUnbind 2024-12-09 11:01:18.351 6203-6203/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[main,5,main]]Server->onDestroy ``` ```java 2024-12-09 11:03:48.763 6488-6488/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[main,5,main]]Client->addMsgObserver 2024-12-09 11:03:48.764 6203-6225/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Binder:6203_4,5,main]]Server->registerClient ``` ## Android AIDL调用方法线程切换  > * AIDL 接口业务处理隶属单独的Binder线程池 > * 不管调用方在主线程还是子线程,在通过AIDL接口调用时,AIDL接口接收并处理数据均在Binder线程 > * 结果返回到调用方侧后又切换为原有的线程 > * AIDL接口调用是一个同步处理过程 ```java 2024-12-09 11:07:21.022 6203-6203/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[main,5,main]]Server->sendMessage 2024-12-09 11:07:22.025 6488-6511/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[Binder:6488_5,5,main]]Client->来消息啦:say hell0 from server 2024-12-09 11:07:33.345 6203-6586/cn.jarlen.android.aidl.server W/AIDL2024: [Thread[Thread-2,5,main]]Server->sendMessage 2024-12-09 11:07:34.346 6488-6511/cn.jarlen.android.aidl.client W/AIDL2024: [Thread[Binder:6488_5,5,main]]Client->来消息啦:say hell1 from server ```