国际化司机端 机器良莠不齐,拉美司机端 机型都是很是低端,特别是巴西,拉取omega数据统计 内存2G及如下,占比70%+,而澳洲司机端都是高端三星机器平均内存都是4G以上,于是咱们必须得"压榨"咱们的代码,吝啬的分配cpu以及内存。java
介入卡顿优化以后,发现有个Top3的ANR以及一些相关卡顿程序员
【ANR】at com.sdu.didi.component.controlpanel.ControlPanelView$15.onAnimationUpdate(ControlPanelView.java:154) |
---|
在拉美一些配置通常的机型上容易出现,大可能是内存只有1G和2G的机型,根据omenga信息能够定位到ANR是因为首页出车动画在波纹属性动画刷新的时候会卡顿,卡顿严重了就ANR了,并且首页出车动画基本是一直在跑着的,确实影响用户体验。面试
看了下代码架构
嗯,不卡才怪呢,以前的同窗为了实现这个无限循环的波纹动效,经过自定义一个圆点view,而后经过属性动画改变这个圆点的宽高、透明度,而后在动画变化时requestLayout,这个效果是实现了,可是性能是极差的,属性动画这些操做都是主线程去执行的 在高端机型是可能性能hold住可是拉美的手机上有的直接就扛不住了,看来须要压榨一下咱们的代码了。app
Android中 View是经过刷新来重绘视图,系统经过发出VSYNC
信号来进行屏幕的重绘,刷新的时间间隔是16ms
,若是咱们能够在16ms之内将绘制工做完成,则没有任何问题,若是咱们绘制过程逻辑很复杂,而且咱们的界面更新还很是频繁,这时候就会形成界面的卡顿,影响用户体验,为此Android提供了SurfaceView
来解决这一问题.ide
SurfaceView 继承自View,是 Android 中一种比较特殊的视图(View),性能
它跟普通View最大的区别是它有本身的Surface,在WMS中有对应的WindowState,在SurfaceFlinger中有Layer学习
通常的Activity包含的多个View会组成View hierachy的树形结构,只有最顶层的DecorView,也就是根结点视图,才是对WMS可见的。这个DecorView在WMS中有一个对应的WindowState。相应地,在SF中对应的Layer。优化
综合这些特色,SurfaceView 通常用在游细、视频、摄影等一些复杂 UI 且高效的图像的显示,这类的图像处理都须要开单独的线程来处理。它的优势以下动画
SurfaceView 经过子线程中进行画面更新,View 则在主线程中进行画面更新。
SurfaceView 用于被动更新,如频繁画面更新,View 则用于主动更新,如触摸点击等事件响应等。
下面清晰说明了SurfaceView的原理
若是当前画面须要不停绘制或者数据处理量较大时,为避免 UI 线程堵塞,就用 SurfaceView 代替 View。
SurfaceView拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面,因为拥有独立的绘图表面,所以SurfaceView的UI就能够在一个独立的线程中进行行绘制,因为不占用主线程资源,使得它能够实现大多复杂而高效的界面绘制,如视频播放 VideoView 和OpenGl es的 GLSurfaceView **直播软件的 不停地点赞动效、天气软件的全屏雨雪动效、游细中的流水、云之类的变化等等。**
使用SurfaceView一顿操做以后
使用 HandlerThread + SurfaceView一顿操做后 (公司管得紧,项目代码不许外放o(╥﹏╥)o)
咱们使用一台小米2s(内存2G)来看下效果,
前置条件:小米2s 内存2G、只运行2个软件(司机端、模拟定位软件)、打开app后置于首页出车页面无其余操做
能够看出 基本在30%左右,一下子手机就开始发烫了
能够看出从cpu消耗从 30%直降到 10%不到! 达到预期效果
一、在作业务的同时得保持技术的思考,不光能够反哺业务,并且不会迷失在业务的汪扬大海中
二、须要"折腾",以改过为能,不以无过为贵,改的越多犯错几率确实会高,可是咱们不是有阿波罗开关嘛
三、作国际化司机端coding得多一点点性能的考虑,国内的Android手机其实很好了,有时候并不会在乎一些性能开销,这跟国际化业务是有点区别的
四、能落实到业务中的技术才是好技术,否则可能会成为"屠龙术"
最后对于程序员来讲,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提高本身,历来都是咱们去适应环境,而不是环境来适应咱们!
这里附上上述的技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了很多精力),包含知识脉络 + 诸多细节,因为篇幅有限,这里以图片的形式给你们展现一部分。
相信它会给你们带来不少收获:
上述【高清技术脑图】以及【配套的架构技术PDF】能够 加我wx:X1524478394 免费获取
当程序员容易,当一个优秀的程序员是须要不断学习的,从初级程序员到高级程序员,从初级架构师到资深架构师,或者走向管理,从技术经理到技术总监,每一个阶段都须要掌握不一样的能力。早早肯定本身的职业方向,才能在工做和能力提高中甩开同龄人。
你们的首页启动,有哪些优化呢?欢迎留言讨论~