Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Performance Classを触ってみよう
Search
takarabe-hamuyatti
January 19, 2024
0
280
Performance Classを触ってみよう
takarabe-hamuyatti
January 19, 2024
Tweet
Share
More Decks by takarabe-hamuyatti
See All by takarabe-hamuyatti
Gradle超入門 / Gradle Super Beginner's Guide"
rabeyatti
0
540
screenWidthDpちょっと 怖いかも、、??
rabeyatti
0
270
Featured
See All Featured
Happy Clients
brianwarren
92
6.4k
Documentation Writing (for coders)
carmenintech
61
4k
Raft: Consensus for Rubyists
vanstee
133
6.3k
Practical Orchestrator
shlominoach
183
9.7k
The Power of CSS Pseudo Elements
geoffreycrofte
61
5k
Being A Developer After 40
akosma
66
580k
The Illustrated Children's Guide to Kubernetes
chrisshort
32
46k
RailsConf 2023
tenderlove
8
550
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
6
3.4k
Infographics Made Easy
chrislema
238
18k
Debugging Ruby Performance
tmm1
70
11k
YesSQL, Process and Tooling at Scale
rocio
165
13k
Transcript
Performance Classを触って みよう shibuya.apk 2024/01/18
自己紹介 財部彰太 twitter : rabe_hamuyatti 株式会社ZOZO ZOZOTOWNのAndroidアプリを作って います。 中森明菜に大ハマりしてます。
目次 • パフォーマンスクラスについて ◦ パフォーマンスクラスとは ◦ 準備 ◦ 取得方法 •
何が嬉しい? • 実際どう使う? ◦ ドキュメントによると ◦ Composeのスクロールパフォーマンスの制限とか?
パフォーマンスクラスについて
パフォーマンスクラスとは
パフォーマンスクラスとは • 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
パフォーマンスの表し方
パフォーマンスの表し方 • 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
準備
準備 • jetpackの、Core-Performanceライブラリへの依存を追加する • モジュールレベルのGradleファイルに、以下の定義を追加 • 今月(2024/01)の10日にbetaからstableになりました https://developer.android.com/jetpack/androidx/releases/core#c ore_performance_version_10_2 dependencies
{ implementation("androidx.core:core-performance:1.0.0") implementation("androidx.core:core-performance-play-services:1.0.0") }
取得方法
取得方法 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) } }
取得方法 Step 2 アプリ内の任意の箇所で、Applicationクラスが保持しているdevicePerformanceクラ スのインスランスを取得する (ドキュメントに、ほんとはこの取得の流れはDI使って上手くやってねみたいなことが書いてあ りました) class MyApplication :
Application() { override fun onCreate() { val devicePerformance = (application as MyApplication).devicePerformance } }
取得方法 Step 3 DevicePerformanceクラスの中にあるプロパティ、mediaPerformanceClass を参照してデバイスのパフォーマンスを判別する when { devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.TIRAMISU
-> { Log.d("","高いよ") } devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.S -> { Log.d("","普通だよ") } else -> { Log.d("","低いよ") } } }
何が嬉しい?
何が嬉しい? • Performance Classは、OSのレベルと、端末の性能を切り分けて教えてくれ る → 端末の性能に合わせて柔軟な実装ができるのでは?
実際どう使う?
実際どう使う? • ドキュメントによると、、 ◦ > デベロッパーは実行時にデバイスのパフォーマンス クラスを検出し、デバイスの機能を 最大限に活用するアップグレード環境を提供できます • 具体的には
◦ Composeでのリスト ▪ Jetpack ComposeのLazyColumn/LazyRowのスクロール速度を制限する ▪ といった取り組みを、適用するかしないかの判断材料にできるかもしれません ▪ 極論、このAPIを使えば、一定以下のパフォーマンスレベルの端末には、 AndroidViewでリストを実装するといった判断も取れるのかもしれません。 ◦ 高解像度映像の生中継とか、複雑なアニメーションとか?
以上!!