安定性の問題を診断する

不必要なパフォーマンスの低下や アプリの安定性をデバッグする必要があります。このガイド では、そのための方法をいくつか紹介しています。

Layout Inspector

Android Studio の Layout Inspector を使用すると、どのコンポーザブルが アプリ内で再コンポーズする時間が必要になりますこのパネルには、Compose がコンテナ内の スキップされたことを示します。

Layout Inspector での再コンポーズとスキップの回数

コンパイラ レポートを作成する

Compose コンパイラは、安定性推論の結果を出力できます。 検査します。この出力を使用すると、どのコンポーザブルが あります以降のサブセクションでは、これらの機能の使用方法を 詳しくは、技術関連のドキュメント ドキュメントをご覧ください

設定

Compose コンパイラ レポートは、デフォルトでは有効になっていません。これらを有効化するには あります。正確な設定は、 Compose コンパイラ Gradle プラグインを使用しているプロジェクトでは、 各モジュールの build.gradle ファイルに次の行を追加します。

  android { ... }

  composeCompiler {
    reportsDestination = layout.buildDirectory.dir("compose_compiler")
    metricsDestination = layout.buildDirectory.dir("compose_compiler")
  }

Compose のコンパイラ レポートがプロジェクトのビルド時に生成されるようになりました。

出力例

reportsDestination は 3 つのファイルを出力します。出力例は次のとおりです。 JetSnack から入手します。

  • <modulename>-classes.txt: このプロジェクト内のクラスの安定性に関するレポート。 説明します。サンプル
  • <modulename>-composables.txt: 再起動の許容方法と モジュール内にコンポーザブルがありますサンプル
  • <modulename>-composables.csv: コンポーザブル レポートの CSV バージョン スプレッドシートにインポートしたり、スクリプトを使用して処理したりできます。 サンプル
で確認できます。

コンポーザブル レポート

composables.txt ファイルには、指定されたそれぞれのコンポーズ可能な関数の詳細が記述されています。 パラメータの安定性、パラメータの安定性、パラメータの安定性、 スキップ可能にできます以下は、 JetSnack:

restartable skippable scheme("[androidx.compose.ui.UiComposable]") fun SnackCollection(
  stable snackCollection: SnackCollection
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
  stable index: Int = @static 0
  stable highlight: Boolean = @static true
)

この SnackCollection コンポーザブルは、完全に再起動可能で、スキップ可能で、 示します。必須ではありませんが、通常はこの方法をおすすめします。

一方、別の例を見てみましょう。

restartable scheme("[androidx.compose.ui.UiComposable]") fun HighlightedSnacks(
  stable index: Int
  unstable snacks: List<Snack>
  stable onSnackClick: Function1<Long, Unit>
  stable modifier: Modifier? = @static Companion
)

HighlightedSnacks コンポーザブルはスキップできません。Compose がそれをスキップしない 発生します。これは、どのパラメータも変更されていない場合でも発生します。 これは、unstable パラメータ snacks にあるためです。

クラスレポート

ファイル classes.txt には、指定されたオブジェクトのクラスに関する同様のレポートが含まれています。 説明します。次のスニペットは、クラス Snack の出力です。

unstable class Snack {
  stable val id: Long
  stable val name: String
  stable val imageUrl: String
  stable val price: Long
  stable val tagline: String
  unstable val tags: Set<String>
  <runtime stability> = Unstable
}

参考までに、Snack の定義は次のとおりです。

data class Snack(
    val id: Long,
    val name: String,
    val imageUrl: String,
    val price: Long,
    val tagline: String = "",
    val tags: Set<String> = emptySet()
)

Compose コンパイラが Snack を不安定としてマークしています。これは、Terraform が Pod の tags パラメータは Set<String> です。これは不変の型であるため、 MutableSet ではありません。ただし、Set, List、 そして Map は、最終的にはインターフェースです。そのため、基盤となる実装には 可変である必要があります。

たとえば、val set: Set<String> = mutableSetOf("foo") と記述します。「 変数であり、宣言された型は可変ではありませんが、 実装は変更可能です。Compose コンパイラは、実行されている Pod が 宣言された型しかわからないため、このクラスの不変性は低くなります。そのため tags は不安定です。