前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >安卓跨进程通信之Aidl教程详解(一)

安卓跨进程通信之Aidl教程详解(一)

作者头像
萬物並作吾以觀復
发布2018-09-13 17:37:57
1.1K0
发布2018-09-13 17:37:57
举报
文章被收录于专栏:指尖下的Android

安卓多进程通信主要有四大方案:1,Activity 2,Broadcast Receiver 3,Content Prodiver 4,Service

1,Activity Intent intent = new Intent(); intent.setAction(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:18702531326")); startActivity(intent); 打电话的权限uses-permission android:name="android.permission.CALL_PHONE"/ 当前应用和手机本身的打电话模块是两个进程,通过设置Action和传递数据给系统打电话模块就可以将电话号码跨进程传递

2,Broadcast Receiver 这个更好理解了,广播分标准和有序,即异步和同步,每个订阅了广播的接受者的能收到数据(没有被拦截),但这个方式是被动的,它们无法交互,对于绝大多数的业务需求来说都需要请求网络数据并计算返回

3,Content Prodiver 内容提供者,安卓四大组件之一,在应用A中新建一个SharedPreferences并写入数据设置权限为Context.MODE_WORLD_READABLE,这样应用B通过A的包名和Key就可以访问这个数据,但是官方已不太建议使用这种方式,它不是进程安全的。

4,Service Aidl目前来说是多进程普遍运用的技术,那么下面看一下通过Aidl怎么实现进程通信

进程通信肯定有传输数据和接受并返还数据,先新建两个项目,一个为AidlDemo1作为Service,另一个为AidlDemo2作为Client

先把Service项目切换到Android模式下,然后再新建aidl文件夹

新建aidl文件夹

在aidl文件夹下新建包名

新建aidl文件

切记后缀名 .aidl

Aidl源码如下

编写供Client项目调用的Service

把aidl匿名实现类赋值给iBinder

把Service项目中的aidl文件拷贝到Client项目,切记包名和文件名必须一致,然后再同步项目

private IMyAidlInterface iMyAidlInterface; private ServiceConnectionconn=newServiceConnection() { @Override //当Service绑定并连接成功后调用,此时的service参数是Service项目返回的aidl实现 public void onServiceConnected(ComponentName name,IBinder service) { iMyAidlInterface= IMyAidlInterface.Stub.asInterface(service); } @Override //断链时清空,节约内存 public void onServiceDisconnected(ComponentName name) { iMyAidlInterface=null; } };

private void initService() { Intent intent =new Intent(); //第一个参数是Service项目中的MyService所属包名,第二个为MyService的全路径名称 intent.setComponent(newComponentName("com.example.administrator.aidldemo1", "com.example.administrator.aidldemo1.MyService")); //安卓5.0以后不允许隐式启动Service intent.setAction("aidl"); bindService(intent,conn,Context.BIND_AUTO_CREATE); }

调用aidl

iMyAidlInterface.getCount(num1,num2);

最后别忘了解绑服务

@Override protected voidonDestroy() { super.onDestroy(); unbindService(conn); }

在运行Client项目时可能会报aidl方法无法找到的异常,此时只需要cliean Project,然后同步一下,运行即可

下一篇写Aidl的复杂数据类型传递以及aidl的原理解析

如有不当,欢迎留言。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.04.19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安卓多进程通信主要有四大方案:1,Activity 2,Broadcast Receiver 3,Content Prodiver 4,Service
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档