《Android高性能实践》
经典优化点
• Java Object
• StringBuilder
• ArrayList.size() in for loop
避免创建
• java.util.Calendar
• IO Resource
• Android.view.View
避免创建
• 参考:
《Thinking in Java》
《Effective Java》
• Java Object
• Thread pool (AsyncTask)
• Bitmap pool
• View pool (ListAdapter)
• SoftReference & WeakReference
(Android2.3+被积极回收)
Cache
• 非UI线程加载
• OutofMemory ...
• Android.util.LruCache
Bitmap
• 占页面启动总用时40 - 70%
• 创建和渲染View的代价昂贵
• 创建(45%)渲染(55%)
View
• 减少Layout (RelativeLayout)
• <include/>
• <merge/>
• ViewStub
Layout
• lint (findbugs)
• monitor(hierarchyviewer)
Layout
Layout
Demo
• 无法回避的非UI操作
• 加载图片到内存
• 增加代码复杂度
• 更容易出bug
后台线程
• 使用gzip
• 缓存与预取
• 尽量避免使用HTTPS
HTTPS握手成功率明显受2G网络影响
网络编程
UI渲染优化
• 从前优化页面加载,代码运行效率
• 4.1开始更多UI渲染优化方案优化
UI渲染优化
• 同一区域的绘制次数
• 减少绘制次数以优化渲染速度
GPU overdraw
GPU overdraw
GPU overdraw
GPU overdraw
• 透明 0X
• 蓝色 1X
• 绿色 2X
• 浅红 3X
• 红色 4X
GPU overdraw
Demo
GPU overdraw
• 减少层叠
• 9-path空白像数
• android4.1开始对9-path做了优化
Prifile GPU rendering
• adb shell dumpsys gfxinfo <pack>
Prifile GPU rendering
GPU overdraw
• Draw:View.onDraw(Canvas)
• Process:2D rendering
• Execute:帧刷新
Animation
• Android 3.x 大量API
• 性能在4.1得到显著的优化
• Layout Animation
android:animateLayoutChanges="true"
Web app
原生代码
• 运行速度快
• 更新难
• 动态更新部署麻烦
• 兼容方案更完善
WEB代码
• 运行速度慢,Dom操作速度慢
• 更新部署容易
• 兼容方案不见得完善...
建议
• 现在原生代码是首选
• 原生代码作为APP骨架
(AppStore)
• 终端性能提高,未来Web APP
Web实践
• Reflow(回流) Repaints(重绘)
• 避免操作Dom树
• 只实现最简单的UE效果
• 最精简的需求,jQuery可以不用了
• 以zepto(5K)替换jQuery(92k)
• 考虑拦截跳转,本地view实现跳转
• 只实现最简单的UE效果
• 最精简的需求,jQuery可以不用了
• 以zepto(5K)替换jQuery(92k)
• 考虑拦截跳转,本地view实现跳转
• 避免依赖position属性实现布局
Web实践
Web实践
• 减少请求文件数
• 使用gzip
• 合并、压缩优化HTML/CSS/JS代码
•
•