不必要なパフォーマンスの低下や アプリの安定性をデバッグする必要があります。このガイド では、そのための方法をいくつか紹介しています。
Layout Inspector
Android Studio の Layout Inspector を使用すると、どのコンポーザブルが アプリ内で再コンポーズする時間が必要になりますこのパネルには、Compose がコンテナ内の スキップされたことを示します。
コンパイラ レポートを作成する
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
は不安定です。