[Android]面试相关
2019-10-30 本文已影响0人
Merbng
并行和并发有什么区别
并行
:多个处理器或多核处理器同事处理多个任务。
并发
:多个任务在同一个CPU核上,按细分的时间片轮流(交替)执行,从逻辑上来那些任务是同时执行。
举例:并发=两个队列和一台咖啡机。并行=两个队列和两台咖啡机。
Android 推送的基本原理
-
推送是什么?
推送就是指服务器定向将信息实时发送至客户端的功能。 -
长连接和短连接
长连接
是指客户端和服务器始终建立着一个通信连接,在连接没有中断之前,客户端和服务器之间可以随时进行通信(如 Socket)
短连接
是指通讯双方有数据交互时,就建立一个连接,数据发送完成后,则断开此连接(如Http)
短连接实现即时通讯叫做轮询,长连接实现即时通讯叫做推送 -
Android推送的基本原理
基本原理
描述一下View的绘制流程
整个View树的绘制流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简单概况为:
根据之前设置的状态,判断是否需要重新计算视图大小(measure)、是否重新需要安置视图的位置(layout)、以及是否需要重绘(draw),框架过程如下:
过程
- 一、measure测三围
主要作用:
为整个View树计算实际的大小,即设置实际的高(对应属性:mMeasuredHeight
)和宽(对应属性:mMeasuredWidth
),每个View的控件的实际宽高都是由父视图和本身视图决定的。
具体的调用链如下:
ViewRoot根对象的属性mView(其类型一般为ViewGroup类型)调用measure()
方法去计算View树的大小,回调View/ViewGroup对象的onMeasure()
方法,该方法实现的功能如下:
1.设置本View视图的最终大小,该功能的实现通过调用setMeasuredDimension()
方法去设置实际的高(对应数学:mMeasuredHeight)和宽(对应属性:mMesauredWidth).
2.如果该View对象是个ViewGroup类型,需要重写该onMeasure()
方法,对其子视图进行遍历的measure()
过程。对每个子视图的measure()
过程,是通过调用父类ViewGroup.java类里的measureChildWithMargins()
方法去实现,该方法内部只是简单地调用了View对象的measure()
方法。 - 二、layout摆好姿势
主要作用:
为将整个根据子视图的大小以及布局参数将View树放到合适的位置上。
具体的调用链如下:
1.layout方法会设置该View视图位于父视图的坐标轴,即mLeft,mTop,mRight,mBottom(调用setFrame()函数去实现)接下来回调onLayout()方法(如果该View是ViewGroup对象,需要实现该方法,对每个子视图进行布局)。
2.如果该View是个ViewGroup类型,需要遍历每个子视图childView,调用该子视图的layout()方法去设置它的坐标值。 - 三、draw挥洒激情
由ViewRoot对象的performTraversals()方法调用draw()方法发起绘制该View树,值得注意的是每次发起绘图时并不会重新绘制每个View树的视图,而只会重新绘制那些“需要重绘”的视图,View类内部变量包含了一个标志位DRAWN,当该视图需要重绘时,就会为该View添加该标志位。
调用流程:
1.绘制该View的背景。
2.为显示渐变框做一些准备操作(大多数情况下,不需要改渐变框)。
3.调用onDraw()方法绘制视图本身(每个View都需要重载该方法,ViewGroup不需要实现该方法)
值得说明的是,ViewGroup类已经为我们重写了dispatchDraw()的功能实现,应用程序一般不需要重写该方法,单可以重载父类函数实现具体的功能。
参考链接:
http://blog.csdn.net/qinjuning/article/details/7110211