Android 面试问题总结

1、Android是如何解决binder不能进行大数据跨进程传递的?

2、Android应用程序启动流程总结

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线程池。

4、Android 跨进程通信,并与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,也就是一个画面层。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值