问题描述
我想测试自定义组件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图片。
解决方法
您可以使用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)
}
}
- 运行项目
- 启动分析器,等到图形变为正常
- 在按钮上单击startTest(),您将看到图形从高到高变为正常
- 选择覆盖图形高区域并查看开始时间和结束时间的区域
- 使用简单的计算器并测量差异
我的测试用例结果: 在linearlayout中添加textview 10000次需要32.411s(上面给出了设备信息)