文档章节

安卓AIDL通信机制的简单使用以及错误分析

陈小默
 陈小默
发布于 2015/09/11 21:19
字数 817
阅读 32
收藏 0

AIDL概念:一种接口定义语言,用于约束两个进程间的通讯规则,供编译器生成代码

首先介绍一下简单的用法:

    使用 AIDL 进行进程之间的通信时要先定义好 客户端 与 服务端.

服务端

        定义:提供功能性服务组件所在的应用程序.

        首先定义一个 AIDL 接口(AIDL 是进程之间通信的一种接口定义语言,若两个应用程序都遵从此接口,则两程序间可以无障碍交流,

就像两个人先声明交流使用英语还是汉语一样,当双方使用相同的标准的时候,他们就可以交流了)

                1),创建类包 在此包下创建一个aidl文件 (例如: MyInterface.aidl)

    

package com.chen.aidl;
interface MyInterface{
//此处的接口不能声明除默认(default)之外的任何其它的访问权限,否则导致编译失败
    String getString(int type);
}

    当保存此文件之后,gen文件夹下会出现一个名为 com.chen.aidl 的包,其中包含一个 处理过的MyInterface.java 源文件

此源文件中包含了MyInterface接口和Stup抽象类.   

public static abstract class Stub extends android.os.Binder implements
            com.chen.aidl.MyInterface {}

由此部分可以看出Stup接口继承了Binder类,同时实现了自定义的接口


在此过程中你的MyInterface.java可能会报错(AIDL 源文件报错),导致此发生的情况可能是你的java编译环境版本过低, 在eclipse里设置 window-preferences-java-Compiler 中将jdk至少设置为1.6保存后 clean即可

        2,) 创建Service子类,并在onBind()方法中返回自定义AIDL接口对象,其对象的获得方式为(如果不知道如何使用绑定Service,请参考博客中其他文章

使用绑定Service的方法实现简易播放功能

)

public IBinder myBinder=new MyInterface.Stub() {
        //重写自定义接口的方法,并在其中指定进程间相互通信的详细过程
        //详细过程:客户端调用服务端的此方法,向其中输入一个参数,服务端根据这个参数向客户端返回相应数据
        //这只是简单的举个栗子
        public String getString(int type) throws RemoteException {
            switch(type){
            case 1:
                return "hello";
            default:
                return "world";
            }
        }
    };

    3)在应用清单文件中注册Service,同时声明Action

<service
            android:name="com.chen.aidlservice.MyService"
            android:enabled="true"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.chen.aidlservice.MyService" />
            </intent-filter>
        </service>

好了,服务端写完了,现在开始写服务端

客户端

    1)用同服务端相同的方式新建一个adil文件

    2)实例化ServiceConnection接口对象,用来监听绑定组件之间的连接

    与普通的绑定服务不同的是,在此onServiceConnected(ComponentName cName,IBinder service)方法中将第二个参数强转为.aidl接口对象

private MyInterface myInterface;
public void onServiceConnected(ComponentName name, IBinder service) {
            myInterface = MyInterface.Stub.asInterface(service);
            //调用此方法时,将获得服务器产生的IBinder myBinder对象,从而调用该对象中的方法
        }


    3)在适当的位置使用隐式意图绑定服务,通常在初始化时

    

Intent intent = new Intent("com.chen.aidlservice.MyService");
Context.bindService(intent, new MyServiceConnection(), BIND_AUTO_CREATE);

    完成此步骤后就可以在任意位置通过getString()方法与服务端进行交流了

    

© 著作权归作者所有

陈小默
粉丝 6
博文 39
码字总数 31230
作品 0
武汉
程序员
私信 提问
Android AIDL浅析及异步调用

AIDL:Android Interface Definition Language,即 Android 接口定义语言。 AIDL 是什么 Android 系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。 为了使其...

cspecialy
2018/05/20
0
0
Android安全模型之Android安全机制(进程通信)

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

柳哥
2014/12/02
470
0
知识总结 插件化学习 Binder机制原理

Binder是android系统特有IPC方式,安卓平台中的各种服务交互基本都是Binder机制实现,理解和掌握Binder机制的实现原理可有效提升软件性能优化点,同时Binder机制的应用也是动态代理方式实现插...

常兴E站
2017/06/05
0
0
android面试3

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

迷途d书童
2012/03/30
165
0
ActivityManager讲解

1.ActivityManager是android框架的一个重要部分,它负责一新ActivityThread进程创建,Activity生命周期的维护,本blog就是着手对ActivityManager框架作一个整体的了解 2.先看一个静态类结构图...

天高空
2012/03/20
6.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

parseint和isNaN用法

本文转载于:专业的前端网站➭parseint和isNaN用法 <!doctype html><html><head><meta charset="utf-8"><title>无标题文档</title></head><body><script> var a='12'; alert......

前端老手
今天
7
0
Kylin 精确去重在用户行为分析中的妙用

作者:史少锋,Apache Kylin committer & PMC,2019/10/11 在上次文章《如何在 1 秒内做到大数据精准去重》中,我们介绍了 Apache Kylin 为什么要支持大数据集上的精确去重,以及基于 Bitmap...

ApacheKylin
今天
6
0
学习记录(二) es6基本语法(rest参数,模板化,axios模块,拦截器)

日常学习记录 模块化:把一个大文件分成多个小文件,按照一定规范进行拼接 es5写法: 导出:module.exports = 数据 导入:require("路径") /路径未添加后缀名时 //默认添加.js //把路径作为文件名...

Pole丶逐
今天
4
0
以程序员的角度怎么购买一台「性价比高的电视」

前俩天有小伙伴在我的文章下留言,说能否把 【国内电视机都介绍一下】,今天我已在TV端开发多年的程序员的角度。谈谈已程序员的角度如何购买一台性价比高的电视。 国内大的电视机品牌介绍 长...

我们都很努力着
今天
5
0
PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部