Android中含有SurfaceView控件的跨进程传递
Android开发中,进程间通信的主要方式,是通过Binder进行通信。 Binder的原来有太多资料可以供学习和参考, 此处就不再赘述。 写这篇文章,其实是想分享一个实际使用中遇到一个关于View的传递问题。
View的跨进程传递,实际上也有一个常用常听说的概念, 叫做RemoteViews。 虽然android SDK提供给我们了一个跨进程的好帮手, 但其传递的类型毕竟还是有限, 只能支持以下:
并且,还有一种场景,当我们用一个进程A加载了非可拓展的SDK,比如第三方SDK,使用其SDK提供的控件,比如自定义的SurfaceView类,但另一个进程B想通过进程间调用来将进程A的SurfaceView中绘制的内容呈现在自己的进程中时, 可能就会遇到麻烦了。 这就是本文想分享的一个跨进程调用SurfaceView的一个方案。
虽然SurfaceView并没有继承Parcelable类, 也不被RemoteViews支持。 但实际上,SurfaceView所绘制的数据区域,可以在进程B中定义,在layout中布局一个MySurfaceView extends SurfaceView类。 并重写以下方法:
surfaceCreated(SurfaceHolder holder)
surfaceChanged(SurfaceHolder holder, int format, int width, int height)
onTouchEvent(Motio