Android进程间通信--AIDL
来源:互联网 发布:重生之星际淘宝主 bl 编辑:程序博客网 时间:2024/06/09 20:29
最近学习了下Android进程间通信,可能都是比较基础的东西,但是自己还是写下来,方便日后自己要用的时候可以直接使用,也为和我一样对这块想要了解的骚年们提供点基础知识吧,
Android进程间通信个人认为有,contentProvider,broadcast,AIDL,sharedpreference,还有网络,数据库等。
今天我们要说的是AIDL:全称为Android interface definition language安卓接口定义语言
对个人来讲,现阶段AIDL的使用,基本和service相结合,通过client调用server端的service。
AIDL IPC机制是面向接口的,较轻量级,他是使用代理类在客户端和实现端数据传递。
java代码如下:
server端:
首先根据需求在src目录下定义一个aidl的文件,如IMusic.aidl,和我们定义的接口差不多,不过注意其中的语法,和包名(和client一致)
区别:
a、除了Java基本数据类型 (int, long, char, boolean等)、String、CharSequence、List、Map外,其他复杂类型都需要显式import(包括其他AIDL定义的接口),即便是在同一个包内定义。
b、支持泛型实例化的List,如List<String>;不支持泛型实例化的Map,如Map<String, String>。对于List为参数接收者接收到的始终是ArrayList;对于Map为参数接收者接收到的始终是HashMap。
c、interface和函数都不能带访问权限修饰符。
d、接口内只允许定义方法,不允许定义静态属性。
import com.example.aidlserver.inner.MyMusic;
interface IMusic{
MyMusic doPlay();
void doPause();
void doStop();
void doResume();
}
注意:MyMusic doPlay()和void doPause(),前者还需要定义一个MyMusic的实体类,并且需要实现Parcelable,需要重写其中的几个方法,你可以把鼠标放在Parcelable上根据提示在提示中进行复制粘贴,另外还需要一个MyMusic的aidl文件,其中Imusic的aidl会在gen目录下自动生成一个Imusic的java文件,需要稍微看下其中的代码,因为之后的编写需要用到,而MyMUSIC的aidl不会在gen目录下生成java文件,好了,服务端的aidl文件基本完成,然后就是service文件啦,
需要一个继承service的类,在onbind方法中,return一个继承IMusic.stub的类(MyBind),这个通过Imusic。java文件了解到:
gen目录下生成的IMusic。java abstract class Stub extends android.os.Binder implements com.example.aidlserver.inner.IMusic
在Mybind中重写接口方法,service操作都在这里面实现。
别忘了在manifest文件中配置service intent-filter,供client端使用
到此处server端基本完成,记住这里server端只提供服务,没有实现任何功能。
client端:调用server端的服务
可以直接把server端的aidl文件包复制到client,注意包名相同,因为是通过代理实现的功能,
client端通过intent调用server端的服务,刚才上面的intent-filter action,进行bindservice,需要一个ServiceConnection,在接口ServiceConnection中需要实现两个方法,一个是onServiceDisconnected--连接失败,另外一个是连接成功--onServiceConnected,在这里进行onbind的调用
public void onServiceConnected(ComponentName name, IBinder service) {
//service连接成功,传入service端的Ibinder对象
iMusic=IMusic.Stub.asInterface(service);
}
注意查看--同样gen目录下的java文件中有一句com.example.aidlserver.inner.IMusic asInterface(android.os.IBinder obj)
绑定服务后,基本功能就可以实现和完善啦,
上述只是实现aidl的实例,各位可以结合自己的需要进行完善,本人也是刚接触Android不久,希望通过这种方式提高自己,文章中有很多错误,希望各位资深的盆友能过支出,我好及时学习改正,大家一起提高,如果有误导到大家的还请原谅和指出,谢谢!
- android AIDL 进程间通信
- android aidl进程间通信
- Android 进程间通信AIDL
- Android进程间通信--AIDL
- Android进程间通信--AIDL
- android 进程间通信(aidl)
- android AIDL进程间通信
- android进程间通信:AIDL
- Android AIDL 进程间通信
- Android进程间通信AIDL
- Android进程间通信---AIDL
- Android 进程间通信AIDL
- Android进程间通信-AIDL
- android 进程通信aidl
- android 进程通信--aidl
- android进程间通信:使用AIDL
- android进程间通信:使用AIDL
- android进程间通信:使用AIDL
- jsp乱码
- ECOS对于ARM平台异常的处理分析
- C#.NET万能数据库访问封装类(ACCESS、SQLServer、Oracle)
- 指针变量作为函数参数实现对输入的两个整数按大小顺序输出
- OpenCV1.0及VC6.0的配置
- Android进程间通信--AIDL
- Shell(Bash)编程实例之获取某个文件夹下的所有文件名(含文件夹)
- 这一年:我30岁,孩子3岁!看完后,对孩子再好一点吧~
- hrbust oj 1362 最大的最小公倍数
- android圆形有边框无背景色
- 指针的简单比较
- 新显卡电脑点击 instll ubuntu 黑屏 解决方案
- Java 数值溢出
- Objective - C基础: 第二天 - 5.类方法的练习