Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Paging使ってみた
Search
Naoya
February 28, 2023
Technology
0
81
Paging使ってみた
Naoya
February 28, 2023
Tweet
Share
More Decks by Naoya
See All by Naoya
AKATSUKIカンファレンス発表資料
tnkw708
0
200
TGAインタビュー結果まとめ
tnkw708
0
110
TGA事業説明資料(申し込み時)
tnkw708
0
94
TGA中間発表
tnkw708
0
22
TGA最終発表
tnkw708
0
66
HACK U2022
tnkw708
0
99
ジャンプコンテスト2022企画書
tnkw708
0
230
第一回100プログラム最終発表
tnkw708
0
150
第二回100プログラム最終発表
tnkw708
0
130
Other Decks in Technology
See All in Technology
【AWS re:Invent 2025速報】AIビルダー向けアップデートをまとめて解説!
minorun365
4
420
.NET 10 のパフォーマンス改善
nenonaninu
2
4.9k
Playwright x GitHub Actionsで実現する「レビューしやすい」E2Eテストレポート
kinosuke01
0
170
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
190
安いGPUレンタルサービスについて
aratako
2
2.6k
freeeにおけるファンクションを超えた一気通貫でのAI活用
jaxx2104
3
1.4k
生成AIでテスト設計はどこまでできる? 「テスト粒度」を操るテーラリング術
shota_kusaba
0
270
Overture Maps Foundationの3年を振り返る
moritoru
0
110
Uncertainty in the LLM era - Science, more than scale
gaelvaroquaux
0
700
AI/MLのマルチテナント基盤を支えるコンテナ技術
pfn
PRO
5
780
pmconf2025 - 他社事例を"自社仕様化"する技術_iRAFT法
daichi_yamashita
0
700
小さな判断で育つ、大きな意思決定力 / 20251204 Takahiro Kinjo
shift_evolve
PRO
1
480
Featured
See All Featured
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
710
Site-Speed That Sticks
csswizardry
13
990
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
69k
Agile that works and the tools we love
rasmusluckow
331
21k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Bash Introduction
62gerente
615
210k
Writing Fast Ruby
sferik
630
62k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
A better future with KSS
kneath
240
18k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
970
The Invisible Side of Design
smashingmag
302
51k
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/