Android Framework学习之surface跨进程传递
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跨进程返回给应用。