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
RecycledViewPool
Search
Moyuru Aizawa
June 28, 2019
Programming
300
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
RecycledViewPool
Moyuru Aizawa
June 28, 2019
More Decks by Moyuru Aizawa
See All by Moyuru Aizawa
BLUETOOTH_SCAN and iBeacon
lvla
1
150
graphicsLayer
lvla
0
300
BluetoothDevice.getName()に裏切られた話
lvla
0
410
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1.3k
Jetpack Compose drag gesture and pinch gesture
lvla
1
4.3k
Jetpack Compose Layout API
lvla
1
720
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
390
CameraX
lvla
2
2.6k
Other Decks in Programming
See All in Programming
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
530
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
3.9k
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
160
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
AIの中の人になってみる
htkym
0
140
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
260
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
680
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
190
初めての模倣学習とVLA
natsutan
0
330
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
41
27k
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
290
バグを直したら useEffect が消えた
colorful12
3
780
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Git: the NoSQL Database
bkeepers
PRO
432
67k
Designing for Timeless Needs
cassininazir
1
460
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
360
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
New Earth Scene 8
popppiees
3
2.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
630
Tell your own story through comics
letsgokoyo
1
1.1k
Site-Speed That Sticks
csswizardry
13
1.5k
The untapped power of vector embeddings
frankvandijk
2
1.8k
The Cult of Friendly URLs
andyhume
79
7k
Transcript
RecycledViewPool @MoyuruAizawa
MoyuruAizawa Moyuru Aizawa Software engineer of CATS Div. CyberAgent Inc.
Previously at Pairs Div. Eureka Inc.
Recycler Scrap Heap 3FDZDMFS LayoutManager View View View Recycled ViewPool
View View View Adapter RecyclerView
Recycler Scrap Heap 3FDZDMFS LayoutManager View View View Recycled ViewPool
View View View Adapter RecyclerView
Recycler Scrap Heap 3FDZDMFS LayoutManager Recycled ViewPool View View View
Adapter RecyclerView
Recycler Scrap Heap 3FDZDMFS LayoutManager Recycled ViewPool Adapter RecyclerView
3FDZDMFE7JFX1PPM Recycled ViewPool
3FDZDMFE7JFX1PPM Recycled ViewPool RecyclerView RecyclerView RecyclerView
3FDZDMFE7JFX1PPM Activity
3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment
3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment Recycler View Recycler View Recycler
View
3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment Recycler View Recycler View Recycler
View Recycled ViewPool
“To maximize view recycling we share the same view pool
across all EpoxyRecyclerView instances in the same Activity.” BJSCOCFQPYZ&QPYZ3FDZDMFS7JFX
/BWJHBUJPO
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
class RecycledViewPoolFactory { private val viewPools = SparseArray<RecycledViewPool>() private fun
create(lifecycleOwner: LifecycleOwner): RecycledViewPool { viewPools.get(lifecycleOwner.hashCode())?.let { return it } val viewPool = RecycledViewPool() viewPools.put(lifecycleOwner.hashCode(), viewPool) lifecycleOwner.lifecycle .addObserver(LifecycleEventObserver { _, event -> if (event == Lifecycle.Event.ON_DESTROY) { viewPool.clear() viewPools.remove(lifecycleOwner.hashCode()) } }) return viewPool } } 3FDZDMFE7JFX1PPM'BDUPSZ
Thank you