Android 优化部分

2021-04-29  本文已影响0人  六比七大

布局优化

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

上一篇下一篇

猜你喜欢

热点阅读