- 博客(11)
- 收藏
- 关注
原创 C++层Binder——IPCThreadState
C++层Binder——IPCThreadState Binder服务端可以自动相应客户端的请求,其底层必然是有对应的线程来支撑它的运行的,而在Binder的服务端里,确实是有一个线程池来支持Binder服务端的运行,我们使用top指令看线程状态,可以看到很多线程名带有Binder字样的就是这个线程池中开辟的Binder线程。 还是以cameraservice为例子。我们知道cameraservice是一个独立进程,而独立进程必然是有一个main函数作为进程的入口函数的。cameraservice的
2022-03-22 00:41:00
1393
原创 C++层Binder——Bn、Bp
C++层Binder——Bn、Bp 我们知道,Binder之间通信,需要一个服务端和一个客户端,而C++层的Binder,Bn端为服务端,Bp端为客户端。所谓Bn、Bp端,实际就是以Bn、Bp为前缀的C++类。 以cameraservice为例,cameraservice作为服务端,其继承于BnCameraService。// av/services/camera/libcameraservice/CameraService.hclass CameraService : public B
2022-03-20 01:40:28
5526
4
原创 C++层Binder——智能指针
C++层Binder——智能指针 要讲native层的Binder机制,那得首先搞明白native层智能指针的原理。 core/include/utils/RefBase.h core/libutils/RefBase.cpp core/libutils/include/utils/StrongPointer.h一、RefBase 一个对象想要使用智能指针,该对象则必须要满足一个前提条件,即该对象必须继承自RefBase。这很好理解,智能指针的原理便是有一个引用计数用于计算该对象被引用
2022-03-20 01:39:55
519
原创 java层Binder——BinderProxy类
java层Binder——BinderProxy类 BinderProxy类实际上是java层Binder机制中客户端Proxy的mRemote成员变量。在Proxy中,客户端调用服务端IPC业务接口时,首先便会通过proxy中的业务接口去调用mRemote.transact,mRemote自然就是Proxy的成员变量,是一个IBinder类,这个IBinder只是一个Binder功能接口,它实际上就是由BinderProxy向上转型得来的。一、实例化 在java层代码中很难找到这个类实例化的地方
2022-03-20 01:38:43
2236
4
原创 java层Binder——Binder类
java层Binder——Binder类 Binder类是服务端Stub的父类,其主要作用也是为服务端提供Binder通信的支持。在Stub类中的onTransact方法,适用于Binder通信的,在客户端调用服务端IPC接口时,最终会调用到Stub的onTransact方法,该方法再去调用业务接口。但是由谁来调用onTransact方法的呢,答案就在Binder类里。一、构造与初始化public Binder(@Nullable String descriptor) { mObject
2022-03-20 01:37:52
1305
原创 JAVA层Bidner——AIDL
JAVA层Bidner——AIDL一、使用 在定义好一个aidl文件并且编译过后,Android studio会自动生成一个aidl对应的java文件。比如定义一个IMyAidlInterface.aidl如下:interface IMyAidlInterface { void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString
2022-03-20 01:37:12
860
原创 Android Handler机制——NativeMessageQueue
Android Handler机制——NativeMessageQueue一、构造与初始化 NativeMessageQueue继承与MessageQueue和LooperCallback。class NativeMessageQueue : public MessageQueue, public LooperCallback { 实例化NativeMessageQueue对象的地方,是在android_os_MessageQueue_nativeInit,这是一个jni接口,对应java层接
2022-03-20 01:28:56
325
原创 Android Handler机制——ThreadLocal
Android Handler机制——ThreadLocal一、构造及初始化public ThreadLocal() {} ThreadLocal本身并不存储主要信息,这从它的构造函数就可看出大概,其并没有强耦合其他类,它主要的作用是提供相关静态方法。但ThreadLocal有个内部类ThreadLocalMap,其中有个数组用于存储相关对象(本质是一个hashmap),而ThreadLocalMap则被存储与Thread对象中。类关系图如下:二、get/setpublic T get(
2022-03-20 01:26:44
393
原创 Android Handler机制——MessageQueue
Android Handler机制——MessageQueue一、构造Message mMessages;private final boolean mQuitAllowed;private long mPtr; // used by native codeMessageQueue(boolean quitAllowed) { mQuitAllowed = quitAllowed; mPtr = nativeInit();} 从MessageQueue的构造可以看出,其主要是两个参数
2022-03-20 01:23:59
869
原创 Android Handler机制——Looper
Android Handler机制——Looper一、构造及初始化final MessageQueue mQueue;final Thread mThread;static final ThreadLocal<Looper> sThreadLocal = new ThreadLocal<Looper>();private Looper(boolean quitAllowed) { mQueue = new MessageQueue(quitAllowed); mTh
2022-03-20 01:20:42
700
原创 Android Handler机制——Handler
Android Handler机制——Handler Handler机制是一个典型的异步环境下的生产者-消费者模型,Handler为生产者,Looper为消费者,Message为产物,MessageQueue则是暂存产物的仓库(缓冲区)。一、构造public Handler();public Handler(@Nullable Callback callback);public Handler(@NonNull Looper looper);public Handler(@NonNull Lo
2022-03-20 01:18:18
283
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人