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
Paging2から3に移行した話
Search
Yuta Tomiyama
August 22, 2020
Programming
460
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Paging2から3に移行した話
Zli × CA 合同LT にて発表
Yuta Tomiyama
August 22, 2020
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
ビルドプロセスをデバッグしよう!
yt8492
2
490
モバイルアプリ開発を始めよう!
yt8492
0
120
Git勉強会
yt8492
0
220
なんでもやってみる勇気
yt8492
0
140
Android Autoが思ったよりしんどい話
yt8492
0
250
apollo-kotlinにcontributeした話
yt8492
0
200
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
1k
今だからこそ知りたいKotlin Multiplatform
yt8492
0
340
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.4k
Other Decks in Programming
See All in Programming
5分で問診!Composer セキュリティ健康診断
codmoninc
0
910
VibeCodingからAgenticWorkflowへ
starfish719
0
330
Android CLI
fornewid
0
210
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
460
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
450
「人を評価する AI」の設計と実装
ryoyanara
0
180
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
210
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
540
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
4
1.6k
GDG Korea Android: 2026 I/O Extended ~ What's new in Android development tools
pluu
0
220
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
210
Featured
See All Featured
First, design no harm
axbom
PRO
2
1.2k
Deep Space Network (abreviated)
tonyrice
0
250
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.3k
The Pragmatic Product Professional
lauravandoore
37
7.4k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
450
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
930
Context Engineering - Making Every Token Count
addyosmani
9
1k
New Earth Scene 8
popppiees
3
2.5k
Fireside Chat
paigeccino
42
4k
Marketing to machines
jonoalderson
1
5.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Transcript
Paging2から3に移行した話 2020/08/22 Zli × CA 合同LT会
自己紹介 HN: マヤミト 本名: 富山雄太 会津大学26期 (学部3年) Zli 現代表 GitHub:
https://github.com/yt8492 好きな技術: Android, Kotlin, gRPC 趣味: Kotlin, 同人音声, VTuber Twitter: yt8492
Pagingってどんなの? ページング ライブラリを使用すると、データの小さなチャンクを一度に読み込んで表示す ることができます。 部分的なデータをオンデマンドで読み込むことで、ネットワーク帯域 幅とシステム リソースの使用量を削減できます。 (https://developer.android.com/topic/libraries/architecture/paging?hl=ja より引用) RecyclerViewのページング処理を簡単に実装できるライブラリ
最新の安定版リリースは2.1.2だが、先日アルファ版で3.0.0がリリースされた
Paging3で変わったこと(一部) - Kotlin Coroutinesのサポート - PagingDataやState、ErrorをCoroutineのFlowで扱うように - データを取得するloadメソッドがsuspend関数に - APIの簡易化
- 2ではデータ取得の処理の実装に DataSourceやDataSource.Factoryを実装する必要があったが、 3ではPagingSourceの実装のみで済む - 2ではDataSourceのデータ取得の処理に初回ロード、次ページ読み込み、前ページ読み込みでメ ソッドが3つに分かれていたが、 3では1つのメソッドに統合
実際に移行してみよう
before: PageKeyedDataSource - ロードの種類でメソッドが分かれる - Coroutineを使いたい場合は自前で CoroutineScopeを用意する必要がある - 表示させたいリストのデータと次のkey をコールバックに渡す
- DataSource.Factoryも実装する必要が ある
after: PagingSource - メソッドが1つに - suspend関数として実装 - 返り値の型が成功と失敗の 直和型 -
初回ロードの場合はkeyがnull
before: ViewModel - PagedListはLiveDataで提供される - 更新処理はDataSource.invalidate を呼び出す
after: ViewModel - PagingDataをFlowで扱うかLiveDataで扱うか選ぶことができる - 更新処理はPagingDataAdapterで用意されているため自前で実装する必要がない - Flowを使う場合、cachedInで引数に渡したCoroutineScopeの間キャッシュされる
before: Fragment - 更新処理はViewModelに生やしたrefreshを呼ぶ - PagedListのLiveDataをobserveし、変更が走るたびにPagedListAdapterにsubmitList する - ローディングなどのアニメーションがある場合、refreshを呼ぶタイミングでアニメーション を発火し変更が走ったタイミングで止める
after: Fragment - 更新処理はPagingDataAdapterに 生えているrefreshを呼ぶ - PagingDataをFlowで扱う場合は collectLatestでsubmitDataする - PagingDataAdapter.dataRefreshFlow
には更新が終わったタイミングで trueが流れてくる - PagingDataAdapter.loadStateFlowに はロードの状態が流れてくるため、 アニメーションを細かく設定するな らこっちのほうが向いてるかも
使ってみた感想 - Paging3はよりKotlinフレンドリーになっている - Paging2より簡潔かつ強力になっている - 単純に移行するだけならすぐ終わるので、一度試す価値はあると思う - 早く安定版リリースされてくれーーッ(出たばかりなので恐らく当分先)
今回のコード QiitaClient https://github.com/yt8492/QiitaClient Paging2を使ったコードは paging2 ブランチに、Paging3を使ったコードはmasterブラン チにあります
参考資料 ページング ライブラリの概要 https://developer.android.com/topic/libraries/architecture/paging Paging 3 library overview https://developer.android.com/topic/libraries/architecture/paging/v3-overview Android
Paging codelab https://codelabs.developers.google.com/codelabs/android-paging