1、Android是如何解决binder不能进行大数据跨进程传递的?
3、zegote为什么跨进程采用的是socket,而不是binder?
答:原因是因为fork只能拷贝当前线程,不支持多线程的fork。如果zygote使用binder的多线程模型与system_server进程进行通讯的话,fork()出的App进程的binder通讯没法用,那么只能再使用exec()启动一个新进程。但是exec()启动的新进程不再包含zygote进程的信息,那这样的就失去了fork的作用了,fork的原理就是copy-on-write机制,zygote进程中已经启动了虚拟机、进行资源和类的预加载以及各种初始化操作,App进程用时拷贝即可。所以最终zygote采用的方案就是socket + epoll,然后fork出子进程后再在子进程中启动binder线程池。
5、View 和 SurfaceView的区别
5.1、View适用于主动更新的情况,而SurfaceView则适用于被动更新的情况,比如频繁刷新界面。
5.2、View在主线程中对页面进行刷新,而SurfaceView则开启一个子线程来对页面进行刷新。
5.3、View在绘图时没有实现双缓冲机制,SurfaceView在底层机制中就实现了双缓冲机制。
6、DecorView和SurfaceView的区别
答:首先我们要知道应用启动的时候必须有一个DectorView,然后其他的button textView都是的挂在这个DecorView节点上面,并且这个DecorView所在的window类型是TYPE_APPLICATION。而SurfaceView是独立于DectorView的存在,并且SurfaceView可以根据自己的需要去Add 在不同的window上面。
如下图,一个window就会对应一个Layer,也就是一个画面层。