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
Paging使ってみた
Search
Naoya
February 28, 2023
Technology
0
80
Paging使ってみた
Naoya
February 28, 2023
Tweet
Share
More Decks by Naoya
See All by Naoya
AKATSUKIカンファレンス発表資料
tnkw708
0
190
TGAインタビュー結果まとめ
tnkw708
0
100
TGA事業説明資料(申し込み時)
tnkw708
0
86
TGA中間発表
tnkw708
0
18
TGA最終発表
tnkw708
0
60
HACK U2022
tnkw708
0
89
ジャンプコンテスト2022企画書
tnkw708
0
220
第一回100プログラム最終発表
tnkw708
0
140
第二回100プログラム最終発表
tnkw708
0
120
Other Decks in Technology
See All in Technology
BI ツールはもういらない?Amazon RedShift & MCP Server で試みる新しいデータ分析アプローチ
cdataj
0
160
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
8.8k
ニッポンの人に知ってもらいたいGISスポット
sakaik
0
140
能登半島地震で見えた災害対応の課題と組織変革の重要性
ditccsugii
0
900
綺麗なデータマートをつくろう_データ整備を前向きに考える会 / Let's create clean data mart
brainpadpr
3
510
なぜAWSを活かしきれないのか?技術と組織への処方箋
nrinetcom
PRO
4
880
今この時代に技術とどう向き合うべきか
gree_tech
PRO
0
1.1k
技育祭2025【秋】 企業ピッチ/登壇資料(高橋 悟生)
hacobu
PRO
0
100
20251014_Pythonを実務で徹底的に使いこなした話
ippei0923
0
190
ComposeではないコードをCompose化する case ビズリーチ / DroidKaigi 2025 koyasai
visional_engineering_and_design
0
110
AWSでAgentic AIを開発するための前提知識の整理
nasuvitz
2
160
E2Eテスト設計_自動化のリアル___Playwrightでの実践とMCPの試み__AIによるテスト観点作成_.pdf
findy_eventslides
2
620
Featured
See All Featured
Making Projects Easy
brettharned
120
6.4k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.4k
The Language of Interfaces
destraynor
162
25k
Raft: Consensus for Rubyists
vanstee
140
7.1k
The Cost Of JavaScript in 2023
addyosmani
55
9k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
189
55k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
33
2.3k
GitHub's CSS Performance
jonrohan
1032
470k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
8
910
Building Adaptive Systems
keathley
44
2.8k
Transcript
Paging 3を使ってみた 会津大学B3 谷川直弥 1
ࣗݾհ ໊લ େֶ ֶ෦ ֶ ग़ झຯ Ұݴ ୩
ձେֶ ίϯϐϡʔλཧֶ෦ ֶ෦ Ѫݝ ອըɺ͓স͍ɺόΠΫɺཱྀߦ ࠷͍ۙΖΜͳਓʹ൴ঁ͍ͦ͏ ͳͷʹʂͱݴΘΕͯਏ͍Ͱ͢
目次 3 1BHJOHͱ 1BHJOHΛ͏ϝϦοτ 1BHJOHͱ1BHJOHͷҧ͍ 1BHJOHͰਪ͞ΕΔΞʔΩςΫνϟ
࣮ ҙ ײ ࢀߟ
• ϖʔδϯάॲཧͱɺେ͖ͳσʔλΛখ͞ͳσʔλʹׂͯ͠ඞཁͳ͚ͩ σʔλΛऔಘ͢Δॲཧͷ͜ͱ • େنͳσʔληοτ͔ΒϖʔδΛϩʔΧϧετϨʔδωοτϫʔΫܦ༝ ͰಡΈࠐΜͰදࣔ͢Δ • εϜʔζͳ69Λఏڙ͢ΔͨΊʹɺେྔͷσʔλΛޮతʹදࣔͰ͖ΔΑ͏ઃ ܭ͞Ε͍ͯΔ Paging
3とは 4 大量のデータを処理するためのページング処理を簡単に実装できるライブラリ
Paging 3を使うメリット(一部) 5 • ϖʔδϯάσʔλʹର͢ΔϝϞϦͷΩϟογϡ • ΈࠐΈϦΫΤετͷॏෳΛഉআ • ߋ৽ॲཧϦϩʔυػೳͳͲɺΤϥʔॲཧͷΈࠐΈαϙʔτ͕ॆ࣮
Paging 2とPaging 3の違い 6 パフォーマンスが向上し、実装コストが低下 Pagingのバージョン Paging 2 Paging 3
データ処理 通常の関数 suspend関数 データの管理 データの変更があった場合、明⽰的 にリフレッシュする ストリーム型に対応 Flow, Live Data 読み込み状態 ⾃前で実装 ライブラリとして提供 データ取得 - DataSourceやDataSource.Factoryを 実装 - 初回ロード、次ページの読み込 み、前ページの読み込みのメ ソッド3つ - PagingSourceのみ実装 - load()メソッドのみ実装
Paging 2とPaging 3の違い 7 Paging 3は推奨のAndroidアプリアーキテクチャに直接統合されている
1. APIから取得したデータを表示するだけの場合 → PagingSourceを利用する Paging 3の実装 8 Paging 3では一般に大きく2つの場合で実装を分けることができる 2.
APIから取得したデータをローカルのDBに保存して、キャッシュを利用する場合 →RemoteMediatorを利用する Repository ViewModel UI PagingSource Pager Flow<PagingData> PagingDataAdapter Repository RemoteMediator DB ViewModel UI Pager Flow<PagingData> PagingDataAdapter DAO
Paging 3の実装〜PagingSourceを利用する場合〜 9 データソースを定義する • getRefreshKey(): 初期ロード後にデータが更新ま たは無効化された時に、load()メソッドに渡す キーを返す •
load(): Web APIからデータを取得し、LoadResult を返す overrideして実装するべきメソッドが2つ
• 1BHFSΦϒδΣΫτ1BHJOH4PVSDF ͔ΒMPBE ϝιουΛݺͼग़͠ɺ -PBE3FTVMUΦϒδΣΫτΛड͚औΔ • 1BHJOH$POGJH1BHJOH4PVSDF͔Βί ϯςϯπΛಡΈࠐΉࡍʹɺ1BHFSͷಡΈࠐ Έಈ࡞Λઃఆ͢ΔͨΊʹ༻͞ΕΔΦϒδΣ Ϋτ
• 'MPX-JWF%BUBͳͲͷετϦʔϜλΠϓΛ ར༻͢Δ Paging 3の実装〜PagingSourceを利用する場合〜 10 PagingDataのストリームを設定する
• 1BHJOH%BUB"EBQUFS RecyclerViewのリストにデータを受けとって表示 するアダプター Paging 3の実装〜PagingSourceを利用する場合〜 11 PagingAdapterを定義する
• ページングデータを表示するRecyclerViewリスト にPagingDataAdapterインスタンスを渡す • PagingDataストリームを監視し、アダプターに データをsubmitData()メソッドで渡す Paging 3の実装〜PagingSourceを利用する場合〜 12 UIでページングデータを表示する
• %BPͷΫΤϦϝιουͰ1BHJOH4PVSDFΛฦ ͢ΫΤϦΛ࡞ ˞͜ͷ1BHJOH4PVSDF্༷ɺ*OUܕͰฦ͢ ඞཁ͕͋Δ Paging 3の実装〜RemoteMediatorを利用する場合〜 13 Roomを用いてローカルDBの実装
• MPBE όοΩϯάσʔληοτͷߋ৽ͱ 1BHJOH4PVSDFͷແޮԽΛߦ͏ • MPBE ϝιουҎԼͷखॱͰ࣮͢Δ ωοτϫʔΫ͔ΒಡΈ͜ΉϖʔδΛܾఆ ωοτϫʔΫϦΫΤετΛτϦΨʔ͢Δ ಡΈࠐΈΦϖϨʔγϣϯͷ݁ՌʹԠͯ͡ɺ
৽͍͠σʔλΛ௨͢Δ͔൱͔ΛܾΊΔ Paging 3の実装〜RemoteMediatorを利用する場合〜 14 RemoteMediatorの実装
• Pagerを指定する • DAOからPagingSourceオブジェクトを返すクエリメ ソッドを指定する • RemoteMediatorをパラメータとして指定する Paging 3の実装〜RemoteMediatorを利用する場合〜 15
Pagerを作成する
Paging 3を使う上での注意点 16 • Roomを利用してDAOを実装する場面で、DBからデータを取得するクエリメソッドの返り値を PagingSourceにする時に、そのKeyがIntしか指定できない • PagerでPagingConfigを指定する際に、取得するイラストの数を指定する数に注意する • LoadStateAdapter.displayLoadStateAsItem(loadState:
LoadState): Boolean を利用する際に指定するオ ブジェクトに注意する
感想 17 • Paging2と比べて飛躍的にPaging3は使いやすくなってる • RoomのPagingSourceを取得するクエリメソッドでKeyを任意の型で指定できるようにしてほしい • LT資料をギリギリまで作らず、徹夜で作る癖を治したい…
参考 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/