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

実例から学ぶJetpack Composeのパフォーマンス改善

Mori Atsushi
October 06, 2022

実例から学ぶJetpack Composeのパフォーマンス改善

Jetpack ComposeはAndroid Viewシステムの教訓を経て、多くのケースで優れたパフォーマンスを発揮します。一方で、いつの間にかパフォーマンスが低下している経験をした人も多いのではないでしょうか?特にアニメーションの表現や、スクロールやドラッグの操作によってUIを切り替える際によく問題が発生します。これらは、必要以上の広範囲で高速に更新処理が行われることに起因します。

より良いパフォーマンスを得るには、Jetpack ComposeのUI更新の仕組みを理解し、状況に応じて対処していく必要があります。このセッションでは実例をもとに、パフォーマンス低下の原因、計測方法、改善方法について解説を行います。

DroidKaigi: https://droidkaigi.jp/2022/timetable/364831
Video: https://youtu.be/_kIkc4IBLHI
Sample code: https://github.com/Mori-Atsushi/compose-performance

Mori Atsushi

October 06, 2022
Tweet

More Decks by Mori Atsushi

Other Decks in Technology

Transcript

  1. パフォーマンス改善 ᶃNFBTVSF ᶄNFBTVSF ᶅNFBTVSF ᶆNFBTVSF ᶇNFBTVSF ᶃNFBTVSF ᶄNFBTVSF ᶅNFBTVSF "OESPJE7JFX

    +FUQBDL$PNQPTF 7JFX(SPVQ ਌$PNQPTBCMF 7JFX 7JFX ࢠ$PNQPTBCMF ࢠ$PNQPTBCMF ඞͣҰ౓ͣͭͷΈ͔͠ܭଌ͞Εͳ͍ ਌ࢠΛԿ౓΋ܭଌ͢Δ৔߹͕͋Δ
  2. 早すぎる最適化を避ける க໋తͳ ύϑΥʔϚϯε՝୊ ίʔυͷՄಡੑ Өڹͷখ͍͞ ύϑΥʔϚϯε՝୊ Өڹͷͳ͍ ύϑΥʔϚϯε՝୊ ॏཁ౓͕ߴ͍ ॏཁ౓͕௿͍

    最初から最適化を⽬指すのは、コードの⾒通しが悪化したり、 
 無駄なコストになる パフォーマンスの問題が⽣じた際に必要な対応を⾏う
  3. ログを仕込む 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF

    4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 4IPQQJOH-JTU1BHFDPNHJUIVCNPSJBUTVTIJQFSGPSNBODF%SFDPNQPTF 3FDPNQPTFຖʹ ϩάग़ྗ ࿈ଓతʹݺͼग़͞Ε͍ͯΔ
  4. Layout Inspector Compose 1 . 2 以降とAndroid Studio Dolphin以降を使うと Recompose数を確認できる

    IUUQTEFWFMPQFSBOESPJEDPNTUVEJPSFMFBTFTMJDPNQPTFDPVOUFS 4IPX3FDPNQPTJUJPO 
 $PVOUTΛ༗ޮʹ͢Δ
  5. Composition Tracing Compose 1 . 3 (beta)以降とAndroid Studio Flamingo(preview)を 


    使うとリリースビルドでも確認できる! IUUQTNFEJVNDPNBOESPJEEFWFMPQFSTKFUQBDLDPNQPTFDPNQPTJUJPOUSBDJOHFDCBFB 4IPQQJOH*UFN3PX͕ େྔʹݺ͹Ε͍ͯΔ 4ZTUFN5SBDF3FDPSEJOH
  6. State Hosting 4IPQQJOH-JTU1BHF "EE%JBMPH 4MJEFS 3FDPNQPTF 3FDPNQPTF 3FDPNQPTF 状態は呼び出し元で管理し、 Single

    Source of Truthを実現する ⼦をrecomposeするために、 すべての親がrecomposeされている IUUQTEFWFMPQFSBOESPJEDPNKFUQBDLDPNQPTFTUBUFTUBUFIPJTUJOH