カスタムビューのパフォーマンスをテストする方法

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)
    }
}
  1. プロジェクトを実行する
  2. プロファイラーを起動し、グラフが正常になるまで待ちます
  3. ボタンでstartTest()をクリックすると、グラフが通常から高になっていることがわかります
  4. グラフの高領域をカバーする領域を選択し、開始時間と終了時間を確認します
  5. 簡単な計算機を使用して差分を測定する

私のテストケースの結果:linearlayoutにtextviewを10000回追加するには、32.411秒かかります(上記のデバイス情報)