卡顿优化
介绍
(1)卡顿是除了crash之外,另一个非常严重的问题,会直接影响到用户体验。
(2)其他的性能问题(内存占用率高,耗费流量等),用户不容易发现,但卡顿会。
(3)卡顿问题难以定位
卡顿问题难以定位的原因?
(1)产生原因错综复杂:代码,内存,绘制,IO等
(2)不易复现:当时场景强相关
工具
(1)CPU Profiler
生成的这个文件,直接双击打开,就可以在android studio中显示出来。
(2)Systrace
优点:
(1)轻量级,开销小
(2)直观反映CPU利用率
(3)给出建议(点击旁边的“Alerts”)
(3)StrictMode [strɪkt]
介绍:
(1)严苛模式,Android提供的一种运行时检测机制,帮助开发人员检测代码中不规范的问题。
(2)方便强大,容易被忽略
(3)包含:线程策略和虚拟机策略检测
线程策略:
(1)自定义的耗时操作,detectCustomSlowCalls()
(2)磁盘读取操作,detectDiskReads
(3)网络操作,detectNetwork
虚拟机策略:
(1)Activity泄漏:detectActivityLeaks()
(2)Sqlite对象泄漏:detectLeakedSqlLiteObjects()
(3)检测实例数量,setClassInstanceLimit()
// StrictMode 工具
private void initStrictMode() {
if (DEV_MODE) {
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectCustomSlowCalls() //API等级11,使用StrictMode.noteSlowCode
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()// or .detectAll() for all detectable problems
.penaltyLog() //在Logcat 中打印违规异常信息
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.setClassInstanceLimit(NewsItem.class, 1) //设置类的数量
.detectLeakedClosableObjects() //API等级11
.penaltyLog()
.build());
}
}