从AIDL来看Binder的通信原理(基于Andorid8

编程入门 行业动态 更新时间:2024-10-19 22:30:37

从AIDL来看Binder的通信<a href=https://www.elefans.com/category/jswz/34/1770123.html style=原理(基于Andorid8"/>

从AIDL来看Binder的通信原理(基于Andorid8

通过 startService()bindService()两种方式开启,在framwork框架层中没有发现流程中使用add_service方法(甚至都没出现ServiceManager)。

↑ 这就看出无论自定义Service最后在不在ServiceManager中,Android本身是不希望我们通过ServiceManager的途径去获取使用自定义Service的。

上述第二条的结论,原因是什么?我不是很清楚,但是基于结论来看:

只要一个进程持有另一进程的BinderProxy类,那我还去找 ServiceManager干什么,这不更加省事吗?

所以,在自定义的流程中把ServiceManager忽略掉,我们就不用考虑Service到底有没有注册在ServiceManager中了。

[](()2. 从AIDL上看Binder

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

AIDL本质上是在Java层对Binder进行了封装。所以Android8.0前后AMS是否使用了AIDL,本质都是使用Binder + 代理模式,只是说使用了 AIDL通过编译时生成代码,节省了一些代码的编写,提高了开发效率。

那么我们就从编译时产生的代码开始,来看看Binder的运作机制,这里使用的例子是:[使用AIDL来进行进程间通信]((),就是一个 Service远程服务 + User类 + IUserManager代理类

[](()2.1 用于进程传输的Stub类


在编译文件产生的 IUserManager中,它是一个接口类,同时它有一个静态内部类 Stub

// IUserManager.java

// 0

public static abstract class Stub extends android.os.Binder implements com.rikkatheworld.aidl_demo.IUserManager {

private static final java.lang.String DESCRIPTOR = “com.rikkatheworld.aidl_demo.IUserManager”;

// 1

public Stub() {

this.attachInterface(this, DESCRIPTOR);

}

// 2

public static com.rikkatheworld.aidl_demo.IUserManager asInterface(android.os.IBinder obj) {

}

// 3

@Override

public android.os.IBinder asBinder() {

return this;

}

// 4

@Override

public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException {

}

// 5

private static class Proxy implements com.rikkatheworld.aidl_demo.IUserManager {

private android.os.IBinder mRemote;

Proxy(android.os.IBinder remote) {

mRemote = remote;

}

// 6

@Override

public com.rikkatheworld.aidl_demo.User getUser(java.lang.String name) throws android.os.RemoteException {

}

}

}

Stub类分成两个部分,一个是自己本身的成员方法,另一个是Proxy类,先来看看这些成员。

(1)自身部分

  1. 注释0

Stub类继承自 Binder,说明这个类是用于进程间传输的。

  1. 注释1 Stub()

构造方法,把自身和标记自身的descriptor传入,

更多推荐

从AIDL来看Binder的通信原理(基于Andorid8

本文发布于:2024-03-23 19:35:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1741994.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:原理   通信   AIDL   Binder

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!