常规方式
背景:获取每个界面加载耗时
实现:覆写setContentView()方法,手动埋点
AOP/ArtHook
(1)AOP实现,(在前面的启动优化中有讲解)
使用:切Activity的 setContentView() 方法。
(2)ArtHook实现,(前面内存优化有讲解,主要是检测获取的图片大小是否和显示控件匹配)
使用:同样是切Activity的 setContentView() 方法。
获取任一控件耗时
使用:LayoutInflater.Factory() ,如下:
LayoutInflaterCompat.setFactory2(getLayoutInflater(), new LayoutInflater.Factory2() {
@Override
public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
if (TextUtils.equals(name, "TextView")) {
// 生成自定义TextView
}
long time = System.currentTimeMillis();
View view = getDelegate().createView(parent, name, context, attrs);
LogUtils.i(name + " cost " + (System.currentTimeMillis() - time));
return view;
}
@Override
public View onCreateView(String name, Context context, AttributeSet attrs) {
return null;
}
});