其实面试的时候需要思路清晰的都描述出来还是要靠嘴巴去说,虽然自己当卡顿的时候知道去检测,但是平时做项目很少去在意,除非是非常明显了,所以遇到这种问题有点虚。
卡顿一般是主线程引起的
主线程进行了耗时操作如网络访问、大文件的读写操作.
频繁的gc引发卡顿
死锁
内存抖动 ,
view绘制频繁(过度绘制)/布局重叠。嵌套过多
绘制间隔16毫秒,
开发者模式-勾选布局什么的显示 检查,红色的表示重叠骨朵
卡顿/anr定位:
用Allocation Tracing来定位大致的情况
用TraceView来确定详细的问题所在。
打印函数执行时间,
查看/data/anr文件夹里面的trace.txt
布局重叠可以减少重叠,或者用裁剪把相交的地方但是不显示的地方进行裁剪
hierachy view查看布局节点。
1.如何找出里面没用的view呢?或者减少不必要的view嵌套。
工具:Hierarchy Viewer检测
优化:
当我们的布局是用的FrameLayout的时候,我们可以把它改成merge
可以避免自己的帧布局和系统的ContentFrameLayout帧布局重叠造成重复计算(measure和layout)
ViewStub:当加载的时候才会占用。不加载的时候就是隐藏的,仅仅占用位置。
三个圆点分别代表:测量、布局、绘制三个阶段的性能表现。
绿色:渲染的管道阶段,这个视图的渲染速度快于至少一半的其他的视图。
黄色:渲染速度比较慢的50%。
红色:渲染速度非常慢。
三个圆点分别代表:测量、布局、绘制三个阶段的性能表现。
1)绿色:渲染的管道阶段,这个视图的渲染速度快于至少一半的其他的视图。
2)黄色:渲染速度比较慢的50%。
3)红色:渲染速度非常慢。