布局优化
绘制原理
cpu负责计算显示内容
GPU负责棚格化(UI元素绘制到屏幕上)
16ms发出VSync信号触发UI渲染
大多数的Android设备屏幕刷新频率:60Hz
布局加载原理
注意:通过反射创建的对象,比直接 new 出来的对象要慢3倍。
优化工具
(1)Systrace
a) 关注Frames
b) 正常:绿色原点,丢帧:黄色或红色
c) Alerts栏
(2)Layout Inspector
a)AndroidStudio自带工具
b)查看视图层次结构
使用 “Tools” -> "Layout Inspector"。如下图:
(3)Choreographer
a)是一个类库,android自带的。
b)可以获取FPS,具备实时性
c)可以带到线上。
注意:Api 16之后
使用:Choregrapher.getInstance().postFrameCallback
private static final long MONITOR_INTERVAL = 160L; //单次计算FPS使用160毫秒
private static final long MONITOR_INTERVAL_NANOS = MONITOR_INTERVAL * 1000L * 1000L;
private static final long MAX_INTERVAL = 1000L; //设置计算fps的单位时间间隔1000ms,即fps/s;
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
private void getFPS() {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
return;
}
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
@Override
public void doFrame(long frameTimeNanos) {
if (mStartFrameTime == 0) {
mStartFrameTime = frameTimeNanos;
}
long interval = frameTimeNanos - mStartFrameTime;
if (interval > MONITOR_INTERVAL_NANOS) {
double fps = (((double) (mFrameCount * 1000L * 1000L)) / interval) * MAX_INTERVAL;
mFrameCount = 0;
mStartFrameTime = 0;
} else {
++mFrameCount;
}
Choreographer.getInstance().postFrameCallback(this);
}
});
}
面试