Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
RecycledViewPool
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Moyuru Aizawa
June 28, 2019
Programming
320
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
160
graphicsLayer
lvla
0
320
BluetoothDevice.getName()に裏切られた話
lvla
0
440
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1.3k
Jetpack Compose drag gesture and pinch gesture
lvla
1
4.4k
Jetpack Compose Layout API
lvla
1
730
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
390
CameraX
lvla
2
2.6k
Other Decks in Programming
See All in Programming
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
190
私なりのハーネスエンジニアリング ~独自の言語処理系の開発を通して~
seosoft
0
110
Kotlinの15年とServer-Side Kotlin
n_takehata
1
170
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
1.2k
気持ちぃ〜角丸 Squircle
ryu1013
0
360
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
250
オーケストレーション記述言語 Katari
yukikurage
0
200
Snowflake Openflow Connector利用の勘所 / 20261024developersio2026tokyo-snowflake-openflow
kasacchiful
PRO
0
220
[2026-10-14](C)Re:ゼロから始める異世界生活〜始まりの終わりと終わりの始まり〜
tosite
0
160
続・コーディングルールの鮮度を保ちたい / keep-fresh-go-internal-conventions-again
handlename
0
130
[2026-10-09]一枚の布で作らなくてもいい。 信頼性は「パッチワーク」で紡がれる~既存の運用と新しい可能性をつなぎ合わせてきたCREの話~
tosite
0
110
エージェントを使い続けるためのメタワーク / Meta-work for keeping using the agent
rkaga
6
1.9k
Featured
See All Featured
Paper Plane (Part 1)
katiecoart
PRO
2
12k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
270
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.4k
Test your architecture with Archunit
thirion
2
2.5k
Odyssey Design
rkendrick25
PRO
2
890
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
410
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.6k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
740
A Modern Web Designer's Workflow
chriscoyier
699
190k
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