Slide 1

Slide 1 text

Paging 3を使ってみた 会津大学B3 谷川直弥 1

Slide 2

Slide 2 text

ࣗݾ঺հ ໊લ େֶ ֶ෦ ֶ೥ ग़਎ झຯ Ұݴ ୩઒௚໻ ձ௡େֶ ίϯϐϡʔλཧ޻ֶ෦ ֶ෦೥ Ѫ஌ݝ ອըɺ͓স͍ɺόΠΫɺཱྀߦ ࠷͍ۙΖΜͳਓʹ൴ঁ͍ͦ͏ ͳͷʹʂͱݴΘΕͯਏ͍Ͱ͢

Slide 3

Slide 3 text

目次 3 1BHJOHͱ͸ 1BHJOHΛ࢖͏ϝϦοτ 1BHJOHͱ1BHJOHͷҧ͍ 1BHJOHͰਪ঑͞ΕΔΞʔΩςΫνϟ ࣮૷ ஫ҙ఺ ײ૝ ࢀߟ

Slide 4

Slide 4 text

• ϖʔδϯάॲཧͱ͸ɺେ͖ͳσʔλΛখ͞ͳσʔλʹ෼ׂͯ͠ඞཁͳ෼͚ͩ σʔλΛऔಘ͢Δॲཧͷ͜ͱ • େن໛ͳσʔληοτ͔ΒϖʔδΛϩʔΧϧετϨʔδ΍ωοτϫʔΫܦ༝ ͰಡΈࠐΜͰදࣔ͢Δ • εϜʔζͳ69Λఏڙ͢ΔͨΊʹɺେྔͷσʔλΛޮ཰తʹදࣔͰ͖ΔΑ͏ઃ ܭ͞Ε͍ͯΔ Paging 3とは 4 大量のデータを処理するためのページング処理を簡単に実装できるライブラリ

Slide 5

Slide 5 text

Paging 3を使うメリット(一部) 5 • ϖʔδϯάσʔλʹର͢ΔϝϞϦ಺ͷΩϟογϡ • ૊ΈࠐΈϦΫΤετͷॏෳΛഉআ • ߋ৽ॲཧ΍ϦϩʔυػೳͳͲɺΤϥʔॲཧͷ૊ΈࠐΈαϙʔτ͕ॆ࣮

Slide 6

Slide 6 text

Paging 2とPaging 3の違い 6 パフォーマンスが向上し、実装コストが低下 Pagingのバージョン Paging 2 Paging 3 データ処理 通常の関数 suspend関数 データの管理 データの変更があった場合、明⽰的 にリフレッシュする ストリーム型に対応 Flow, Live Data 読み込み状態 ⾃前で実装 ライブラリとして提供 データ取得 - DataSourceやDataSource.Factoryを 実装 - 初回ロード、次ページの読み込 み、前ページの読み込みのメ ソッド3つ - PagingSourceのみ実装 - load()メソッドのみ実装

Slide 7

Slide 7 text

Paging 2とPaging 3の違い 7 Paging 3は推奨のAndroidアプリアーキテクチャに直接統合されている

Slide 8

Slide 8 text

1. APIから取得したデータを表示するだけの場合 → PagingSourceを利用する Paging 3の実装 8 Paging 3では一般に大きく2つの場合で実装を分けることができる 2. APIから取得したデータをローカルのDBに保存して、キャッシュを利用する場合 →RemoteMediatorを利用する Repository ViewModel UI PagingSource Pager Flow PagingDataAdapter Repository RemoteMediator DB ViewModel UI Pager Flow PagingDataAdapter DAO

Slide 9

Slide 9 text

Paging 3の実装〜PagingSourceを利用する場合〜 9 データソースを定義する • getRefreshKey(): 初期ロード後にデータが更新ま たは無効化された時に、load()メソッドに渡す キーを返す • load(): Web APIからデータを取得し、LoadResult を返す overrideして実装するべきメソッドが2つ

Slide 10

Slide 10 text

• 1BHFSΦϒδΣΫτ1BHJOH4PVSDF ͔ΒMPBE ϝιουΛݺͼग़͠ɺ -PBE3FTVMUΦϒδΣΫτΛड͚औΔ • 1BHJOH$POGJH1BHJOH4PVSDF͔Βί ϯςϯπΛಡΈࠐΉࡍʹɺ1BHFS಺ͷಡΈࠐ Έಈ࡞Λઃఆ͢ΔͨΊʹ࢖༻͞ΕΔΦϒδΣ Ϋτ • 'MPX΍-JWF%BUBͳͲͷετϦʔϜλΠϓΛ ར༻͢Δ Paging 3の実装〜PagingSourceを利用する場合〜 10 PagingDataのストリームを設定する

Slide 11

Slide 11 text

• 1BHJOH%BUB"EBQUFS RecyclerViewのリストにデータを受けとって表示 するアダプター Paging 3の実装〜PagingSourceを利用する場合〜 11 PagingAdapterを定義する

Slide 12

Slide 12 text

• ページングデータを表示するRecyclerViewリスト にPagingDataAdapterインスタンスを渡す • PagingDataストリームを監視し、アダプターに データをsubmitData()メソッドで渡す Paging 3の実装〜PagingSourceを利用する場合〜 12 UIでページングデータを表示する

Slide 13

Slide 13 text

• %BPͷΫΤϦϝιουͰ1BHJOH4PVSDFΛฦ ͢ΫΤϦΛ࡞੒ ˞͜ͷ1BHJOH4PVSDF͸࢓্༷ɺ*OUܕͰฦ͢ ඞཁ͕͋Δ Paging 3の実装〜RemoteMediatorを利用する場合〜 13 Roomを用いてローカルDBの実装

Slide 14

Slide 14 text

• MPBE όοΩϯάσʔληοτͷߋ৽ͱ 1BHJOH4PVSDFͷແޮԽΛߦ͏ • MPBE ϝιου͸ҎԼͷखॱͰ࣮૷͢Δ ωοτϫʔΫ͔ΒಡΈ͜ΉϖʔδΛܾఆ ωοτϫʔΫϦΫΤετΛτϦΨʔ͢Δ ಡΈࠐΈΦϖϨʔγϣϯͷ݁ՌʹԠͯ͡ɺ ৽͍͠σʔλΛ௨஌͢Δ͔൱͔ΛܾΊΔ Paging 3の実装〜RemoteMediatorを利用する場合〜 14 RemoteMediatorの実装

Slide 15

Slide 15 text

• Pagerを指定する • DAOからPagingSourceオブジェクトを返すクエリメ ソッドを指定する • RemoteMediatorをパラメータとして指定する Paging 3の実装〜RemoteMediatorを利用する場合〜 15 Pagerを作成する

Slide 16

Slide 16 text

Paging 3を使う上での注意点 16 • Roomを利用してDAOを実装する場面で、DBからデータを取得するクエリメソッドの返り値を PagingSourceにする時に、そのKeyがIntしか指定できない • PagerでPagingConfigを指定する際に、取得するイラストの数を指定する数に注意する • LoadStateAdapter.displayLoadStateAsItem(loadState: LoadState): Boolean を利用する際に指定するオ ブジェクトに注意する

Slide 17

Slide 17 text

感想 17 • Paging2と比べて飛躍的にPaging3は使いやすくなってる • RoomのPagingSourceを取得するクエリメソッドでKeyを任意の型で指定できるようにしてほしい • LT資料をギリギリまで作らず、徹夜で作る癖を治したい…

Slide 18

Slide 18 text

参考 18 • https://developer.android.com/topic/libraries/architecture/paging/v3- overview?hl=ja • https://developer.android.com/topic/libraries/architecture/paging/v3-network- db?hl=ja • https://developer.android.com/topic/libraries/architecture/paging/v3- migration?hl=ja • https://codezine.jp/article/detail/15314 • https://tech.pepabo.com/2021/10/18/android-paging3/ • https://techblog.yahoo.co.jp/entry/2023022130414554/