Android AIDL实现跨进程通信的示例代码
作者:xybCoder博客 发布时间:2023-10-07 07:35:10
标签: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) {
}
};
来源:http://xybcoder.github.io/2017/03/03/%20%20AIDL%E5%AE%9E%E7%8E%B0%E8%B7%A8%E8%BF%9B%E7%A8%8B%E9%80%9A%E4%BF%A1/?utm_source=tuicool&utm_medium=referral


猜你喜欢
- public/protected/privatepublic表示公开,private表示私有,protected表示保护,什么都不写表示默认
- 什么是AOPAOP是Aspect Oriented Programming的缩写,即『面向切面编程』。它和我们平时接触到的OOP都是编程的不
- 在 Windows 有一些字符是不能作为文件名,尝试重命名一个文件,输入/ 就可以看到windows 提示的不能作为文件名的字符那么具体是包
- 虽然项目中都夹杂了Hibernate的支持,但是团队开发中,很多人为了编写特殊查询的代码时都使用了JDBC进行查询。JDBC查询后返回的是一
- 今天使用Android Studio建了一个新项目,遇到了不少问题,网上也找了不少解决方案都无效(可能Studio版本、项目版本等都不一样,
- 目录通过切面,实现超灵活的注解式数据校验Spring MVC的校验方式通过切面实现自己的注解式数据校验Spring boot aop注解数据
- 书上对 i ++ 和 ++ i 的解释如下:int i = 3,a = 0 ;i ++ : 先赋值再运算;例如:a = i ++
- 1. 继承1. 子类继承了父类,获得父类的全部Field和方法。子类Student类继承父类,将可以获得父类的全部Field和方法publi
- 本文实例为大家分享了Android Studio实现进度条效果的具体代码,供大家参考,具体内容如下实验作业 要求一个进度条,进度随机效果图x
- 有经验的程序员应该都见过,一个方法坐拥几十上百个参数。方法为何要有参数?因为不同方法间需共享信息。但方法间共享信息的方式不止一种,除了参数列
- 最近开发过过成中遇到一些小问题,比如一个btn点击用户可能只点击了一次但是后台响应了多次,像一些表单的提交出现这种问题比较棘手,当然解决这种
- 智能指针(smart pointer)是存储指向动态分配(堆)对象指针的类,用于生存期控制
- 删除本地仓库未下载完成的缓存文件(删除像图片显示这样以.lastUpdated结尾的文件)执行mvn -v确保maven命令可以正常执行执行
- 目录1、成员2、辅助功能3、字段4、方法4.1参数4.2方法主体和局部变量4.3静态和实例方法4.4虚方法、重写方法和抽象方法4.5方法重载
- 一:什么是协变与逆变协变指能够使用比原始指定的派生类型的派生程度更大(更具体的)的类型,逆变指能够使用比原始指定的派生类型的派生程度更小(不
- 1. 支持的视图技术前端模板引擎技术的出现,使前端开发人员无需关注后端业务的具体实现,只关注自己页面的呈现效果即可,并且解决了前端代码错综复
- 在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabAct
- 最近 * 丝的公司想要为以前的那个网页产品加上一个过滤的功能,废话不多说,直接看筛选的界面是啥样的吧:可以看出,我们的Message分为Crit
- 现在的项目越来越多的都是打包成jar运行尤其是springboot项目,这时候配置文件如果一直放在项目中,每次进行简单的修改时总会有些不方便
- C# 从枚举值获取对应的文本描述详解有时枚举值在显示时,需要显示枚举值对应的文本串。一种方案是在调用的地方使用switch或者if来判断枚举