文档章节

android AIDL通信

lgl_lfx
 lgl_lfx
发布于 2016/02/29 16:50
字数 508
阅读 82
收藏 6
点赞 1
评论 0

1.创建android工程
2.创建aidl文件(不需要public类似的修饰)例如 IBankAccountService.aidl
 interface IBankAccountService {
     double calMondy(double sum);
}

3.自定义类继承Service并实现 onBind方法,在自定义类中可以设置多个变量实现多个aidl文件,根据onBind的Intent的action返回不同的IBinder对象
如:
public class CustomService extends Service {

        //操作 可以有多个类似这样的变量,多个aidl
    private IBankAccountService.Stub ibanAccountService=new IBankAccountService.Stub() {
        @Override
        public double calMondy(double sum) throws RemoteException {
            return sum*10;
        }
    };
    
    @Override
    public IBinder onBind(Intent intent) {
        return ibanAccountService;
    }

}

4.进程间数据传递
/**
通过Android.os提供的Parcelable类型来传递数据,通常我们使用Eclipse+ADT插件来完成,在Eclipse中在Package Explorer view视图上单击鼠标右键,选择Create Aidl preprocess file for Parcelable classes(创建aidl预编译文件),最终我们创建一个名为android123.aidl文件
*/
 
import android.os.Parcel;
import android.os.Parcelable;
 
public final class Rect implements Parcelable {
public int left;
public int top;
public int right;
public int bottom;
 
public static final Parcelable.Creator<Rect> CREATOR = new Parcelable.Creator<Rect>() {
public Rect createFromParcel(Parcel in) {
return new Rect(in);
}
 
public Rect[] newArray(int size) {
return new Rect[size];
}
};
 
public Rect() {
}
 
private Rect(Parcel in) {
readFromParcel(in);
}
 
public void writeToParcel(Parcel out) { //当前数据写入到Parcel中
out.writeInt(left);
out.writeInt(top);
out.writeInt(right);
out.writeInt(bottom);
}
 
public void readFromParcel(Parcel in) { //从Parcel中读取数据
left = in.readInt();
top = in.readInt();
right = in.readInt();
bottom = in.readInt();
}
}

5.进程内使用(以下方式启动service)
 IBankAccountService mService=null;
    private ServiceConnection mConnection = new ServiceConnection() {
           public void onServiceConnected(ComponentName className,
                   IBinder service) {
               mService = IBankAccountService.Stub.asInterface(service);
  try {
                System.out.println(  mService.calMondy(20));
            } catch (RemoteException e) {
                e.printStackTrace();
            }
   }

        @Override
        public void onServiceDisconnected(ComponentName name) {
        }
    };
   

 // 启动服务
                 Intent intent=new Intent();
        intent.setClass(this, CustomService.class);
        bindService(intent,
                mConnection, Context.BIND_AUTO_CREATE);

当mService不等于null时就可以使用了

6.进程外使用(跨进程,注意:***保证拥有CustomService的项目已经装在手机里)
  1.把IBankAccountService.aidl及其包拷入到目标工程(工程内此文件路径完全一致)
  2.类似前面第5步一样启动服务,服务直接设置action的名字
  3.如果需传递数据需要使用前面定义的Parcelable实现类传递,当然需要把前面定义的Parcelable实现类及其包拷贝过来
 

© 著作权归作者所有

共有 人打赏支持
lgl_lfx
粉丝 0
博文 6
码字总数 2371
作品 0
厦门
程序员
android自启动服务,研究自用

1、开机自启动 2、系统服务(需要用到AIDL进行数据传输);拿到需求的第一步准备下手的是开机自启动。 一、开机自启动 这里要分三步走: 第一步:加入开机自启动权限 <uses-permission andro...

捍卫机密
07/10
0
0
简单音乐播放实例的实现,Android Service AIDL 远程调用服务

Android Service是分为两种: 本地服务(Local Service): 同一个apk内被调用 远程服务(Remote Service):被另一个apk调用 远程服务需要借助AIDL来完成。 AIDL 是什么 AIDL (Android Inte...

baisou
2013/07/27
0
0
Android进程间通信--消息机制及IPC机制实现

一、概念及说明 Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Service,不论这个...

哈全文
2012/04/28
0
0
android开发AIDL实例

由于每个应用程序都运行在自己的进程空间,并且可以从应用程序UI运行另一个服务进程,而且经常会在不同的进程间传递对象。在Android平台,一个进程通常不能访问另一个进程的内存空间。但是a...

晨曦之光
2012/03/13
0
0
Android通过Aidl调用Service实例

最近在上Android课程,现在我懒得备课了,直接拿博客来讲好了! Aidl访问Service实例: Android中Activity与Service是属于两个不同的进程的,而两个进程之间的通讯除了可以用广播之外,最完美...

MingliC
2013/12/23
0
0
Android进程间通信--消息机制及IPC机制实现

一、概念及说明 Android为了屏蔽进程的概念,利用不同的组件[Activity、Service]来表示进程之间的通信! 组件间通信的核心机制是Intent,通过Intent可以开启一个Activity或Service,不论这个...

暖风
2010/11/13
0
0
什么是aidl?Android AIDL详解

什么是aidl: aidl是 Android Interface definition language的缩写,一看就明白,它是一种android内部进程通信接口的描述语言,通过它我们可以定义进程间的通信接口 icp:interprocess commu...

今幕明
2014/03/04
0
0
android使用aidl实现进程间通信

在Android中, 每个应用程序都有自己的进程,当需要在不同的进程之间传递对象时,该如何实现呢? 显然,Java中是不支持跨进程内存共享的。因此要传递对象, 需要把对象解析成操作系统能够理解的...

AlexZhuang
2012/04/20
0
2
Android安全模型之Android安全机制(进程通信)

进程通信是应用程序进程之间通过操作系统交换数据与服务对象的机制。Linux操作系统的传统进程间通信(IPC)有多种方式,比如管道,命令管道,信号量,共享内存,消息队列,以及网络与Unix套接...

柳哥
2014/12/02
0
0
[Android]用AIDL生成Service

对于用aidl生成Service,以前做过,这里记录一下,顺便也整理一下思路。 1、创建aidl文件。 这个aidl文件必须包括包名,和用interface的形式定义方法。 例如:IAIDLService.aidl。 package ...

亭子happy
2012/09/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
8分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
13分钟前
0
0
崛起于Springboot2.X之集成MongoDB使用Repository增删改查(26)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
15分钟前
1
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
15分钟前
1
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
15分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
15分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
18分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
20分钟前
0
0
maven父、子级版本号同时修改

命令: mvn versions:set -DnewVersion=0.0.2-SNAPSHOT

沉默的懒猫
21分钟前
0
0
Spring boot中的异常处理之注解响应

Controller层 return patientRepository.findById(id) .orElseThrow(() -> new NotFoundException(String.format("Patient %d not found", id))); Exception类 @ResponseS......

亚林瓜子
22分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部