Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Performance Classを触ってみよう

takarabe-hamuyatti
January 19, 2024
280

Performance Classを触ってみよう

takarabe-hamuyatti

January 19, 2024
Tweet

Transcript

  1. 目次 • パフォーマンスクラスについて ◦ パフォーマンスクラスとは ◦ 準備 ◦ 取得方法 •

    何が嬉しい? • 実際どう使う? ◦ ドキュメントによると ◦ Composeのスクロールパフォーマンスの制限とか?
  2. パフォーマンスクラスとは • Androidデバイスが満たすべき、さまざまな性能の基準が定義されたもの ◦ Android12で初めて導入された • Androidの各versionごとに、独自のパフォーマンスクラスを定義している ◦ Android互換性定義ドキュメント(CDD)としてまとめられている ◦

    https://source.android.com/docs/compatibility/cdd?hl=ja • 後述するライブラリが、ビルド バージョン情報での宣言、または Google Play 開発 者サービスのデータに基づいて、デバイスのメディア パフォーマンス クラスを教え てくれる https://developer.android.com/reference/android/os/Build.VERSION#MEDIA_ PERFORMANCE_CLASS
  3. パフォーマンスの表し方 • APIレベルのコードネームで表される ◦ Build.VERSION_CODES.TIRAMISU -> パフォーマンスレベル13 • 搭載しているOSのversionと、パフォーマンス レベルは必ずしも一致しない

    ◦ Android12が搭載され、パフォーマンス レベルが12のデバイスを、Android13に アップグレードしてもパフォーマンスレベ ルが13に上がるわけではない ◦ 自分のpixel6(OS13)はパフォーマンス レベル12でした https://developer.android.com/topic/performance/performance-class?hl=ja
  4. 取得方法 Step1 ApplicationのonCreateメソッドで、PlayServicesDevicePerformanceと いったDevicePerformanceを実装したクラスのインスタンスを生成する class MyApplication : Application() { lateinit

    var devicePerformance: DevicePerformance override fun onCreate() { // Use a class derived from the DevicePerformance interface devicePerformance = PlayServicesDevicePerformance(applicationContext) } }
  5. 取得方法 Step 3 DevicePerformanceクラスの中にあるプロパティ、mediaPerformanceClass を参照してデバイスのパフォーマンスを判別する when { devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.TIRAMISU

    -> { Log.d("","高いよ") } devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.S -> { Log.d("","普通だよ") } else -> { Log.d("","低いよ") } } }
  6. 実際どう使う? • ドキュメントによると、、 ◦ > デベロッパーは実行時にデバイスのパフォーマンス クラスを検出し、デバイスの機能を 最大限に活用するアップグレード環境を提供できます • 具体的には

    ◦ Composeでのリスト ▪ Jetpack ComposeのLazyColumn/LazyRowのスクロール速度を制限する ▪ といった取り組みを、適用するかしないかの判断材料にできるかもしれません ▪ 極論、このAPIを使えば、一定以下のパフォーマンスレベルの端末には、 AndroidViewでリストを実装するといった判断も取れるのかもしれません。 ◦ 高解像度映像の生中継とか、複雑なアニメーションとか?