Slide 1

Slide 1 text

RecycledViewPool @MoyuruAizawa

Slide 2

Slide 2 text

MoyuruAizawa Moyuru Aizawa
 Software engineer of CATS Div. CyberAgent Inc. 
 Previously at Pairs Div. Eureka Inc.

Slide 3

Slide 3 text

Recycler Scrap Heap 3FDZDMFS LayoutManager View View View Recycled ViewPool View View View Adapter RecyclerView

Slide 4

Slide 4 text

Recycler Scrap Heap 3FDZDMFS LayoutManager View View View Recycled ViewPool View View View Adapter RecyclerView

Slide 5

Slide 5 text

Recycler Scrap Heap 3FDZDMFS LayoutManager Recycled ViewPool View View View Adapter RecyclerView

Slide 6

Slide 6 text

Recycler Scrap Heap 3FDZDMFS LayoutManager Recycled ViewPool Adapter RecyclerView

Slide 7

Slide 7 text

3FDZDMFE7JFX1PPM Recycled ViewPool

Slide 8

Slide 8 text

3FDZDMFE7JFX1PPM Recycled ViewPool RecyclerView RecyclerView RecyclerView

Slide 9

Slide 9 text

3FDZDMFE7JFX1PPM Activity

Slide 10

Slide 10 text

3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment

Slide 11

Slide 11 text

3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment Recycler View Recycler View Recycler View

Slide 12

Slide 12 text

3FDZDMFE7JFX1PPM Activity Fragment Fragment Fragment Recycler View Recycler View Recycler View Recycled ViewPool

Slide 13

Slide 13 text

“To maximize view recycling we share the same view pool across all EpoxyRecyclerView instances in the same Activity.” BJSCOCFQPYZ&QPYZ3FDZDMFS7JFX

Slide 14

Slide 14 text

/BWJHBUJPO

Slide 15

Slide 15 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 16

Slide 16 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 17

Slide 17 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 18

Slide 18 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 19

Slide 19 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 20

Slide 20 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 21

Slide 21 text

class RecycledViewPoolFactory { private val viewPools = SparseArray() 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

Slide 22

Slide 22 text

Thank you