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

简介: 安卓多进程通信主要有四大方案:1,Activity 2,Broadcast Receiver 3,Content Prodiver 4,Service1,ActivityIntent intent = new Intent();intent.

安卓多进程通信主要有四大方案: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的原理解析

如有不当,欢迎留言。






相关文章
|
3月前
|
开发框架 前端开发 Android开发
Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势
本文深入探讨了 Flutter 与原生模块(Android 和 iOS)之间的通信机制,包括方法调用、事件传递等,分析了通信的必要性、主要方式、数据传递、性能优化及错误处理,并通过实际案例展示了其应用效果,展望了未来的发展趋势。这对于实现高效的跨平台移动应用开发具有重要指导意义。
305 4
|
1天前
|
消息中间件 Linux C++
c++ linux通过实现独立进程之间的通信和传递字符串 demo
的进程间通信机制,适用于父子进程之间的数据传输。希望本文能帮助您更好地理解和应用Linux管道,提升开发效率。 在实际开发中,除了管道,还可以根据具体需求选择消息队列、共享内存、套接字等其他进程间通信方
27 16
|
3月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
483 4
|
3月前
|
存储 Unix Linux
进程间通信方式-----管道通信
【10月更文挑战第29天】管道通信是一种重要的进程间通信机制,它为进程间的数据传输和同步提供了一种简单有效的方法。通过合理地使用管道通信,可以实现不同进程之间的协作,提高系统的整体性能和效率。
|
3月前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
3月前
|
消息中间件 存储 供应链
进程间通信方式-----消息队列通信
【10月更文挑战第29天】消息队列通信是一种强大而灵活的进程间通信机制,它通过异步通信、解耦和缓冲等特性,为分布式系统和多进程应用提供了高效的通信方式。在实际应用中,需要根据具体的需求和场景,合理地选择和使用消息队列,以充分发挥其优势,同时注意其可能带来的复杂性和性能开销等问题。
|
4月前
|
存储 Python
Python中的多进程通信实践指南
Python中的多进程通信实践指南
48 0
|
5月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
477 4
|
6月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中
|
6月前
|
消息中间件 安全 Java
Linux源码阅读笔记13-进程通信组件上
Linux源码阅读笔记13-进程通信组件上

热门文章

最新文章

  • 1
    如何修复 Android 和 Windows 不支持视频编解码器的问题?
  • 2
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
  • 3
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 4
    【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
  • 5
    APP-国内主流安卓商店-应用市场-鸿蒙商店上架之必备前提·全国公安安全信息评估报告如何申请-需要安全评估报告的资料是哪些-优雅草卓伊凡全程操作
  • 6
    Android经典面试题之Kotlin中Lambda表达式和匿名函数的区别
  • 7
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
  • 8
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
  • 9
    从零开始掌握进程间通信:管道、信号、消息队列、共享内存大揭秘
  • 10
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
  • 相关实验场景

    更多