Android面试抱佛脚:进程间通讯学习,从Binder使用看起

本文详细介绍了Android中的Binder通信方式,包括Binder的序列化方案对比、Binder的底层驱动支持以及Binder在Android系统架构中的作用。重点讨论了AIDL(Android Interface Definition Language)的使用步骤和生成的代码结构,解释了AIDL如何简化进程间通信的编程工作。通过分析AIDL定义的接口文件,展示了Stub和Proxy类的角色和工作原理。最后,文章提到了手动实现Binder类以进行进程通信的基本步骤。
摘要由CSDN通过智能技术生成

}

}

可以看到有这么四个自定义的方法,说明如下:

  1. writeToParcel 实现序列化功能,写入到parcel

  2. describeContents 提供内容描述,几乎都是返回0,只有在存在文件描述符的时候才返回1

  3. createFromParcel 实现反序列功能,从序列化后的对象中创建原始对象

  4. newArray 提供数组容器

ParcelaleSerializable 都能实现序列化,怎么选呢?我们可以根据两种方案的区别来选择。Serializable使用简单,但是开销比较大,在序列化和反序列化的过程中需要大量的I/O操作。而Parcelable 的使用稍微复杂一些,但是性能比较好是Android 推荐的序列化方式。所以在进行内存传递的时候,可以使用Parcelable进行序列化,但是在涉及到持久化和网络传输的时候,Parcelable也能实现,但是使用会比较复杂,所以在这两种情况下建议使用Serializable。上面就是两种序列化方案的区别。

Binder

====================================================================

Binder是Android专有的一种通信方式,Binder底层有kernel驱动的支持,设备驱动文件是/dev/binder,通过该驱动,android 在native层有一整套C/S架构,在java层也封装了一层相应实现。直观来说,Binder是Android中的一个类,它继承了IBinder接口。 Binder 可以进行跨进程通讯,也可以进行本地进程通讯。我们在写一个无须跨进程的本地服务 LocalService 时,可以直接获取Binder类来进行通讯。 基于binder,Android实现了多个ManagerService。因为android 系统有各种系统组件硬件需要暴露给其他进程,并且要集中管理,所以安卓在实现管理方案之后,再通过binder来暴露对应的接口服务,比如pms,ams,wms。 Android开发中,开发者对于Binder最直接的应用就是使用AIDL,相关使用流程大概有以下几步:

  1. 创建aidl文件,声明方法

  2. 继承生成的Stub类(Binder的抽象子类),实现服务端操作的相关接口方法

  3. 创建另一个进程中运行的service,在其onBind方法中返回该Binder实例

  4. 使用该Service,通过ServiceConnection#onServiceConnected回调中得到的参数IBinder 获取定义接口的Binder实例。如IHelloManager.Stub.asInterface(service)

  5. 通过Binder实例进行远程方法调用。

AIDL ( Android 接口定义语言 )


先看谷歌官方开发者文档的介绍 我们可以利用AIDL定义客户端与服务均认可的编程接口,以便二者使用进程间通信 (IPC) 进行相互通信。在安卓中,编写进程间通信的代码较为繁琐,Android 会使用AIDL 帮我们处理这类问题。 我们先从一个典型的AIDL实例入手来探究。

定义AIDL接口

我们来定义一个 aidl 接口文件

//IHelloManager.aidl

package top.guuguo.wanandroid.tv;

import top.guuguo.wanandroid.tv.User;

interface IHelloManager {

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值