如何测试自定义视图的性能

问题描述

我想测试自定义组件UI渲染性能。我使用以下测试用例来检查渲染性能

private long getLayoutTime(int layoutRes) {
        final Context targetContext = getInstrumentation().getTargetContext();
        final LayoutInflater layoutInflater = LayoutInflater.from(targetContext);

        final long startTime = System.currentTimeMillis();
        for (int i = 0; i < 1000; i++) {
            final View view = layoutInflater.inflate(layoutRes,null);
            view.setLayoutParams(new ViewGroup.LayoutParams(0,0));

            view.measure(View.MeasureSpec.makeMeasureSpec(1000,View.MeasureSpec.EXACTLY),View.MeasureSpec.makeMeasureSpec(0,View.MeasureSpec.UNSPECIFIED));
            final int measuredHeight = view.getMeasuredHeight();
            final int measuredWidth = view.getMeasuredWidth();

            view.layout(0,measuredWidth,measuredHeight);
        }
        return System.currentTimeMillis() - startTime;
    }

使用此代码,我可以测试布局渲染时序。这样我更改了布局设计以获得更好的性能。现在,我正在创建一个具有多个布局和组件(如图像,文本视图等)的Custom视图类。我将在运行时附加该类,并且组件将在运行时根据服务器的响应进行创建。我不会在XML中附加此自定义组件。现在,我要测试此自定义视图的渲染性能。请向我建议使用任何工具或任何方式来计算自定义视图的UI呈现时间。

我的Profiler图片

enter image description here

解决方法

您可以使用android studio内置工具Profiler(位于左下方面板)轻松衡量性能。 重要:客户视图的性能取决于正在运行的设备,这是我针对redmi 7a测试过的示例

设备:redmi 7a 内存:2GB

 private fun startTest() {
    for (x in 0..10000) {
        val textview = TextView(this)?.apply { text = "Dummy Text $x" }
        mLinearLayout?.addView(textview)
    }
}
  1. 运行项目
  2. 启动分析器,等到图形变为正常
  3. 在按钮上单击startTest(),您将看到图形从高到高变为正常
  4. 选择覆盖图形高区域并查看开始时间和结束时间的区域
  5. 使用简单的计算器并测量差异

我的测试用例结果: 在linearlayout中添加textview 10000次需要32.411s(上面给出了设备信息)

enter image description here