Android Framework学习之surface跨进程传递

2022-12-15  本文已影响0人  一只二凡子

Surface跨进程传递原理

Parcelable是可以跨进程传递的。传递的关键在于两个函数:writeToParcel和readFromParcel

mNativeObject: native层对象的指针

Activity有一个decorView,需要surface绘制,surface是需要向系统申请的,这里就涉及到跨进程传递surface

relayoutWindow:向系统申请surface

mWindowSession:binder对象

mWindowSession.relayout:向WMS发起relayout调用,这里会申请surface

mSurface:空壳surface

WMS端

SurfaceControl里有个mGraphicBufferProducer(binder对象),根据这个binder对象创建了一个native surface对象,然后将这个surface对象与java层的surface绑定在一起(native surface对象的指针保存在java层)

有了GraphicBufferProducer要多少buffer便有多少buffer

GraphicBufferProducer是个binder对象,binder对象跨进程传递很快,比起buffer效率高很多

1. 怎么理解surface,它是一块buffer吗?

    surface不是buffer,而是一个含有生成buffer的binder对象,GraphicBufferProducer

2. surface是怎么跨进程传递的?

    surface是怎么跨进程传递的是GraphicBufferProducer 这个binder对象

3. Activity的surface在系统中创建后,是怎么跨进程传回应用的?

    系统中创建的是SurfaceControl对象,不是surface对象,SurfaceControl里有GraphicBufferProducer,有了GraphicBufferProducer我们就可以创建surface跨进程返回给应用。

上一篇下一篇

猜你喜欢

热点阅读