Android AIDL实现跨进程通信的示例代码
时间:2019-03-31
本文章向大家介绍Android AIDL实现跨进程通信的示例代码,主要包括Android AIDL实现跨进程通信的示例代码使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
AIDL是Android接口定义语言,它可以用于让某个Service与多个应用程序组件之间进行跨进程通信,从而可以实现多个应用程序共享同一个Service的功能。
实现步骤
例:用 A程序去访问 B程序的MyService.java服务
- 在B中建立AIDL文件MyAidlService.AIDL,在AIDL文件里写我们的接口方法
- 在MyService中写AIDL文件定义的方法的具体服务逻辑
- 在B的manifest文件中,为Service添加action “com.xyb.servicetest.MyAidlService” 用于A静态来访问Service(这里是因为,如果用动态Intent (this, MyService.class), 在A中没有MyService这个类)
- 把B的AIDL文件夹拷贝到A中,一定要注意包的路径依然为B中的路径
- 在A中利用静态Intent来启动B的服务MyService
对应步骤详细代码:
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访问B的服务
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);//对10和50相加 Log.d("onServiceConnected", sum + ""); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- python笔记4-遍历文件夹目录os.walk()
- 【专知国庆特刊-PyTorch手把手深度学习教程系列01】一文带你入门优雅的PyTorch
- python接口自动化14-multipart/form-data上传图片
- 【干货】RL-GAN For NLP: 强化学习在生成对抗网络文本生成中扮演的角色
- python接口自动化15-multipart/form-data表单提交
- appium+python自动化32-android_uiautomator定位进阶版
- appium+python自动化33-解锁九宫格(TouchAction)
- 用qemu中最少的代码实现一个kvm模拟器
- 关关的刷题日记07——Leetcode 26. Remove Duplicates from Sorted Array 方法1
- openstack如何扩展API之一:新添加API
- 值得收臧 | 从零开始搭建带GPU加速的深度学习环境(操作系统、驱动和各种机器学习库)
- python接口自动化16-multipart/form-data上传多个附件
- python接口自动化17-响应时间与超时(timeout)
- python+requests+excel接口自动化数据驱动
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释