整理几个Android中面试遇到的,有点模糊的细节

1. AMS、WMS、SerfaceFlinger的主要作用。

乍一听,在面试中,我回答的是AMS主要管理Activity,WMS负责窗口管理,SurfaceFlinger是Ui绘制相关。这样回答应该也没错,但是好像不太饱和。

AMS负责维护和管理ActivityStack,而WMS主要负责窗口是和事件分发管理,WMS会向AMS请求Activity(创建或从stack中弹出),SurfaceFlinger位于libraries层,WMS会将UI绘制任务传递过来。

2. java GC。

 我当时答出了新生代GC复制算法,老年代的标记-清除算法,但好像GC复制算法没有讲清楚。

JVM的GC复制算法:

  JVM的内存分配划分了四块:M1, M2,M3和M4, 其中,内存大小:M4 > M1 > M2 = M3。

M4在老年代,新对象的创建会放在M1中,当M1内存满,进行GC时,会将未被回收的内存放在M2中,如此往复,直到M2内存满时,将M2中无法进行回收的对象拷贝到M3,同时,M2和M3的引用进行交换,清空M3(即旧的M2,其中的内存均为可回收),此时,依然存活的对象即升级一次;如果往复当一些对象等级达到一定次数的GC还没有释放即可进行晋升,即进入老年代。


3. android ui的过度绘制和过度渲染问题

实事求是的说,工作中对过度渲染还是比较注意的(即Ui层级嵌套过深),但是Ui过度绘制的问题真心就没太关注,甚至乍一被问到,也说不清楚过度绘制的概念。

过度渲染特指UI的层级嵌套过深,可以使用systrace、手机的显示布局边界观察到ui的层级,对有问题的ui进行优化甚至重构。使用一些android的ui组件,比如merge,viewstub等,可以有助于对ui层级进行删减。

而Ui过度绘制问题,可能是某部分ui从开始绘制到绘制完毕时间较长,部分ui本不必刷新却做了多余的刷新导致的。可以通过系统设置内的“调试过度绘制”、“GPU呈现模式”工具可以看到ui绘制的时间,可以据此发现问题,进行优化,


4. android view 遍历过程中的一些细节。

 之前仅仅知道view的绘制包括onMeasure、onLayout、onDraw分别对应着计算组件的宽高尺寸、组件所在手机屏幕上位置、ui内容进行绘制,记得getonMeasureHeight()、getHeight分别对应onMeasure,onLayout后获取的高度值。但还有一些细节,就没怎么刻意注意了。


1) onMeasure(intwidthMeasureSpec, intheightMeasureSpec)

widthMeasureSpec和heightMeasureSpec是该View对象的 上一级父对象要求的宽高值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值