Android 优化部分
布局优化
xml层面:变为宽而平的结构
1、减少过度绘制
2、使用include、merge、viewStub
3、constraintLayout约束布局减少层级
代码层面
使用自定义view 使用new textview方式避免io和反射
框架X2C:使用apt技术将xml编译成java代码
绘制优化
1、onDraw中不做耗时任务,减少循环
2、onDraw中不要创建新的局部变量,不仅占内存,还会触发频繁GC (所有线程需要暂停)
3、减少不必要的invalidate,调用invalidata(left,top,right,bottom)指定刷新区域
recyclerview优化:
1、横向rv设置缓存池 rv.setRecycledViewPool(pool)
2、增大cachesize rv.setItemViewCacheSize(8)
3、横滑rv高度固定,rv.setHasFixedSize(true)避免requestLayout
4、不要使用new clickListener,全局创建一个,根据position确定entity
内存优化
1、内存泄漏场景
2、强软弱虚
3、bitmap injustDecodeBounds inPreferredConfig inbitmap
4、sparseArray ArrayMap
5、图片多级缓存
6、少用装箱
7、圆角开关
8、profile页控制5个
卡顿优化
1、绘制任务太重,绘制一帧耗时太长
2、主线程太忙,导致vSync信号到来时还没有准备好数据
traceview 介绍参照启动优化
textview优化
StrictMode严苛模式
io/网络/Activity泄漏/sqlite泄漏/监测实例数量等
在日志栏过滤”StrictMode"
sp优化:分多个模块,使用apply
apm
watch-dog 5s
启动优化
1、子线程预创建SplashActivity Newstabactivity
2、加密模块、数据库初始化、视频播放器sdk、广告sdk等intentservice异步加载;
日志服务、听新闻sdk,websocket、同步收藏文件夹、主题下载 主线程延时加载idelhandler;
或者懒加载
3、splash中减轻布局,使用viewstub
3、webview优化
application中预创建webvie,webview首次初始化后,即使 webview 已经释放,但一些webview 共用的全局服务或资源对象仍没有释放,第二次初始化时不需要再生成这些对象从而变快。
webview复用池,要防止内存泄漏
activity中webview初始化和本地资源请求同时处理,初始化后取本地请求到的资源
预置html css框架,通过拦截shouldInterceptRequest方法取本地资源,直接js解析
4、频道流预加载,快速显示
5、分进程进行初始化,有些进程比较晚
systrace
Trace.beginSection("--start") Trace.endSection(--end) 一般设置-t 5s -b 10240 10M
traceview 主要观察calls + Recur calls/total(该方法调用次数+递归次数)和 cpu time/call(该方法耗时)
Debug.startMethodTracing("traceview") Debug.stopMethodTracing() 生成文件 Android/data/packagename/files
查看应用启动时间
adb shell am start -w com.demo.newsclient/SplashActivity
ThisTime 最后一个activity启动耗时 TotalTime所有Activity启动耗时(重要:创建进程+Application初始化+Activity显示) WaitTime AMS启动Activity的总耗时
包体大小
1、混淆
2、lint
3、webp
4、资源module去重
5、去掉不必要的So