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
[Jetpack Compose] 原理から見るSkippable対応
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Swimmy
January 18, 2024
Programming
370
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[Jetpack Compose] 原理から見るSkippable対応
Swimmy
January 18, 2024
More Decks by Swimmy
See All by Swimmy
Android16 Migration Stories ~Building a Pattern for Android OS upgrades~
reoandroider
0
240
違いがワカルKotlinプログラマーへの道
reoandroider
0
160
違いのワカル Kotlinプログラマーへの道
reoandroider
0
260
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.4k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途
reoandroider
0
3.2k
Androdアプリ開発におけるネストスクロール問題と向き合うの説明用途~NestedScrollInteropConnectionは何してるの?編~
reoandroider
0
2.9k
Roborazziを最大限に活用する(導入編)
reoandroider
0
360
Master of NestedScroll
reoandroider
0
16k
Jetpack_Composeで_半円のプログレスバーを作った話
reoandroider
0
460
Other Decks in Programming
See All in Programming
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
150
任せる範囲はこう広がった / How the Scope of AI Delegation Has Expanded
nrslib
1
210
正しくソフトウェアを作る、前提を疑うための認知の視点 / doubt-premise
minodriven
21
7.1k
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.7k
Creating Composable Callables in Contemporary C++
rollbear
0
180
Inside Stream API
skrb
1
810
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.5k
Agentic UI
manfredsteyer
PRO
0
210
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
210
dRuby over BLE
makicamel
2
400
Oxlintのカスタムルールの現況
syumai
6
1.2k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
140
Featured
See All Featured
Skip the Path - Find Your Career Trail
mkilby
1
160
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Tell your own story through comics
letsgokoyo
1
980
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
150
Leo the Paperboy
mayatellez
7
1.9k
So, you think you're a good person
axbom
PRO
2
2.1k
Between Models and Reality
mayunak
4
360
Faster Mobile Websites
deanohume
310
32k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Transcript
Harada Reo @ すいみー 2024/1/18 LT新年会 [Jetpack Compose] 原理から見るSkippable対応
すいみー CyberAgent Inc. Ameba どすこい塾 DroidKaigi Staff RunningReo 自己紹介 /
Introduction
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する
理想状態 Skippable対応をどこまで やるべきかの基準を 持てるようになる
Skippableとは? Composeのレンダリング段階は3つあるが パフォーマンス向上のため更新時に 飛ばす(skipする)工夫ができる Skippableとは?
話さないこと 細かいSkippable対応の tipsは特に話しません ※以下の赤い部分を話します
Composeフレームワークが やってくれること
Composeのフレームワークがやってくれること @Composable fun Title() { Column(modifier = Modifier.fillMaxWidth()) { Text(“Hello
World”) Button(onClick = { ... }) } }
Composeのフレームワークがやってくれること 普通の関数との違い ・何度も再実行可能である ・Skippableである ・リアクティブである
Composeのフレームワークがやってくれること 普通の関数との違い ・何度も再実行可能である ・Skippableである ・リアクティブである
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない Compose
Compiler = Kotlin CompilerのPlugin
Composeのフレームワークがやってくれること Compose Compilerは Stateを読み込むComposable関数を検出して それをCompose Runtimeに伝える 逆にStateを読み込まないComposable関数は Compose Runtimeに伝えない Compose
Runtimeってなに?
Composeのフレームワークがやってくれること その前に・・・
Composeのフレームワークがやってくれること @Composable fun Title() { Column(modifier = Modifier.fillMaxWidth()) { Text(“Hello
World”) Button(onClick = { ... }) } }
Composeのフレームワークがやってくれること 普段書いているComposable関数ですが 実は見えない引数がコンパイル時に合成されている
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } }
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える コードを自由に書き換えられるのはKotlinの恩恵! Javaでこのような柔軟な言語プラグインを作るのが難しい
Composeのフレームワークがやってくれること @Composable fun Title($composer: Composer<*>) { Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } } すべてのcomposable関数にcomposerが渡される ツリー構造をcompose runtimeに伝える コードを自由に書き換えられるのはKotlinの恩恵! Javaでこのような柔軟な言語プラグインを作るのが難しい Compose Runtimeってなに?(再び)
Composeのフレームワークがやってくれること ツリー構造をメモリ配列で見てみる
@Composable fun Title($composer: Composer<*>) { $composer.start(123) Column(modifier = Modifier.fillMaxWidth(), $composer)
{ Text(“Hello World”, $composer) Button(onClick = { ... }, $composer) } $composer.end() } Composeのフレームワークがやってくれること
Composeのフレームワークがやってくれること Composable関数はUIの実体を返すわけではく Compose Runtimeを通じて メモリ内のツリー構造を構築したり 更新したりするので 高速なレンダリングが可能になっている
Composeのフレームワークがやってくれること Compose Runtimeは Composable関数のコードとSlot Tableを繋げる Interfaceのようなものでありそう メモリ内にDataのツリー構造を作っている 仕組みは素晴らしい!
Composeのフレームワークがやってくれること Composeフレームワークは Kotlinのオブジェクト指向に 関数型の概念を加える
Composeのフレームワークがやってくれること 関数型の特徴として 関数名・型・引数によって一意のkeyを生成する 関数の返り値をキャッシュすることができる 先ほどのSlot Tableの例から分かるように Composeフレームワークはソース内の 位置関係をキャッシュすることで どのような依存関係があるのかを明確にしている
振り返り
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する
このLTのゴール Composeフレームワークが 開発者に対して与える 恩恵を把握する 難しかった・・・
振り返り Compose内部の仕組みは難しく これだけでComposeのフレームワークの 恩恵を把握したというには早計・・・
振り返り とはいえ、原理からComposeを見ると Skippable対応が自然と実践できたり 今までの取り組みが腑に落ちることがある
「Jetpack Compose internals」 https://jorgecastillo.dev/book/ 「Under the hood of Jetpack Compose
— part 2 of 2」 https://medium.com/androiddevelopers/under-the-hood-of-jetpack- compose-part-2-of-2-37b2c20c6cdd 「KotlinConf 2019: Leland Richardson が解き明かす Compose ランタイム」 https://www.youtube.com/watch?v=6BRlI5zfCCk&t=153s 「Thinking in Compose」 https://developer.android.com/jetpack/compose/mental-model?hl=ja 参考資料
「Jetpack Compose internals」 https://jorgecastillo.dev/book/ 「Under the hood of Jetpack Compose
— part 2 of 2」 https://medium.com/androiddevelopers/under-the-hood-of-jetpack- compose-part-2-of-2-37b2c20c6cdd 「KotlinConf 2019: Leland Richardson が解き明かす Compose ランタイム」 https://www.youtube.com/watch?v=6BRlI5zfCCk&t=153s 「Thinking in Compose」 https://developer.android.com/jetpack/compose/mental-model?hl=ja 参考資料 誰か一緒に輪読会しませんか?
本年も よろしくお願いします