Android Binder 机制

Android Binder机制的文章非常多,这篇文章主要是理一下我对Binder的理解。本文不是一篇介绍Binder的文章,也不是一篇探讨Binder实现的文章。
本文会以AndroidStudio根据aidl接口自动产生的java文件来看Binder,进而来理解Binder机制

其实Android的Binder机制类似于:RPC(远程过程调用)。如果你理解它,相信Binder机制就更容易理解了。

首先我们使用AndroidStudio来定义一个aidl接口:

interface IUserManager {
    int getUserAge(in String userName);
}

然后我们来直接看一个由AndroidStudio根据自定义的aidl接口IUserManager产生的IUserManager.java文件。

这个文件我们来分3个部分看:

IUserManager接口结构

public interface IUserManager extends android.os.IInterface {

    public static abstract class Stub extends android.os.Binder implements com.susion.demo.aidl.IUserManager {..}

    public int getUserAge(java.lang.String userName) throws android.os.RemoteException;
}

这个接口的结构还是很简单的:

  1. 它继承自android.os.IInterface
  2. 定义了一个待实现的方法int getUserAge()
  3. 定义了一个Stub类。这个类继承自Binder,并实现了IUserManager接口。

int getUserAge()这个方法就是我们IUserManager接口的方法。而android.os.IInterface是什么呢?先看一下它在源码中的定义:

/**
 * Base class for Binder interfaces.  When defining a new interface,
 * you must derive it from IInterface.
 */
public interface IInterface
{
    /**
     * Retrieve the Binder object associated with this interface.
     * You must use this instead of a plain cast, so that proxy objects
     * can return the correct result.
     */
    public IBinder asBinder(); //IBinder是Binder的抽象接口
}

即他是所有Binder都要实现的接口, 为什么呢?举一个我们都熟悉的场景 :

比如ApplicationThreadActivityManagerService(运行在服务端进程)就可以通过它来调用我们客户端的方法。我们会把这些方法抽象为一个接口(IApplicationThread),这个接口可以理解为我们告诉服务端,你可以对客户端执行哪些操作。

我们还知道ApplicationThread其实他就是一个Binder。所以这两者一结合就可以这么说ApplicationThread: 客户端提供给服务端一个Binder,通过这个Binder服务端可以对客户端做一些操作,这些操作具体定义在

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值