カスタムビューのパフォーマンスをテストする方法
Aug 19 2020
カスタムコンポーネントの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, 0, measuredWidth, measuredHeight);
}
return System.currentTimeMillis() - startTime;
}
このコードを使用して、レイアウトのレンダリングタイミングをテストできます。そのため、パフォーマンスを向上させるためにレイアウトデザインを変更しました。現在、画像やテキストビューなどの複数のレイアウトとコンポーネントを使用してカスタムビュークラスを作成しています。実行時にクラスをアタッチし、サーバーの応答に基づいてコンポーネントを実行時に作成します。このカスタムコンポーネントをXMLで添付しません。次に、このカスタムビューのレンダリングパフォーマンスをテストします。カスタムビューのUIレンダリング時間を計算するためのツールや方法を教えてください。
私のプロファイラー画像。

回答
1 EsjayIT Aug 27 2020 at 16:55
android studioの組み込みツールプロファイラー(左下のパネル)を使用して、パフォーマンスを簡単に測定できます。重要:カスタマービューのパフォーマンスは実行中のデバイスによって異なりますここに私がredmi7aでテストしたサンプルがあります
デバイス:redmi7a RAM: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.411秒かかります(上記のデバイス情報)
