Android卡顿问题分析方法
2017-08-10 16:39
627 查看
卡顿直接原因:绘制一帧的时间>16ms
根本原因:
1)UI线程做了耗时操作(严重ANR)
2)布局过于复杂,嵌套多,overdraw
3)内存GC被频繁触发
分析方法:
1)HierarchyViewer会显示绘制每个view时(onMeasure、onLayout和onDraw的耗时),找出哪个view的绘制导致了掉帧,优化其布局;
2)设置->开发者选项->调试GPU过度绘制(overdraw)
3)Android Studio 鼠标放在代码区点击右键->Analyze->Inspect Code–>界面选择你要检测的模块->点击确认开始检测,会提示布局及逻辑的问题
4)Traceview定位具体耗时的方法
优化策略:
1)
overdraw:优化布局层级(多在xml中使用include标签复用布局、使用merge标签去除不必要的布局层级(配合include使用,即include的布局的根节点不是RelativeLayot或Linearlayout二十merge标签)、使用ViewStub标签实现按需加载)、移除不必要的背景、invisible尽量用gone代替、onDraw中尽量用canvas.clipRect()指定绘制区域
2)GC频繁导致内存抖动:
GC原因:GC_MALLOC——内存分配失败时触发;GC_CONCURRENT——当分配的对象大小超过一个限定值(不同系统)时触发;GC_EXPLICIT——对垃圾收集的显式调用(System.gc())
;GC_EXTERNAL_ALLOC——外部内存分配失败时触发;
根本原因:
1)UI线程做了耗时操作(严重ANR)
2)布局过于复杂,嵌套多,overdraw
3)内存GC被频繁触发
分析方法:
1)HierarchyViewer会显示绘制每个view时(onMeasure、onLayout和onDraw的耗时),找出哪个view的绘制导致了掉帧,优化其布局;
2)设置->开发者选项->调试GPU过度绘制(overdraw)
3)Android Studio 鼠标放在代码区点击右键->Analyze->Inspect Code–>界面选择你要检测的模块->点击确认开始检测,会提示布局及逻辑的问题
4)Traceview定位具体耗时的方法
优化策略:
1)
overdraw:优化布局层级(多在xml中使用include标签复用布局、使用merge标签去除不必要的布局层级(配合include使用,即include的布局的根节点不是RelativeLayot或Linearlayout二十merge标签)、使用ViewStub标签实现按需加载)、移除不必要的背景、invisible尽量用gone代替、onDraw中尽量用canvas.clipRect()指定绘制区域
2)GC频繁导致内存抖动:
GC原因:GC_MALLOC——内存分配失败时触发;GC_CONCURRENT——当分配的对象大小超过一个限定值(不同系统)时触发;GC_EXPLICIT——对垃圾收集的显式调用(System.gc())
;GC_EXTERNAL_ALLOC——外部内存分配失败时触发;
相关文章推荐
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- 关于Android主线程(ActivityThread)源代码分析以及一些特殊问题的非常规方法
- Android 65K问题之Multidex原理分析及NoClassDefFoundError的解决方法
- Android的死机、重启问题分析方法
- 【android】从源码分析调用ViewPager的notifyDataSetChanged无刷新的问题及解决方法
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- Android的死机、重启问题分析方法
- Android的死机、重启问题分析方法
- Android的ListView异步加载图片时,错位、重复、闪烁问题的分析及解决方法
- Android的死机、重启问题分析方法
- Android平台上的ANR问题分析方法
- Android 内存溢出(OOM)问题分析方法
- Android的死机、重启问题分析方法
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- Android ValueAnimator时长错乱或者不起作用的解决方法以及问题分析
- Android 触摸屏(TP)问题现象分析和解决方法汇总
- Android RecyclerView的卡顿问题的解决方法
- Android之使用Ftrace初步分析界面卡顿问题
- Android 触摸屏(TP)问题现象分析和解决方法汇总