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
0
430
Paging2から3に移行した話
Zli × CA 合同LT にて発表
Yuta Tomiyama
August 22, 2020
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
モバイルアプリ開発を始めよう!
yt8492
0
53
Git勉強会
yt8492
0
120
なんでもやってみる勇気
yt8492
0
90
Android Autoが思ったよりしんどい話
yt8492
0
200
apollo-kotlinにcontributeした話
yt8492
0
140
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
850
今だからこそ知りたいKotlin Multiplatform
yt8492
0
290
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
サーバーフレームワークの仕組みが気になったので車輪の再発明をしてみた
yt8492
0
200
Other Decks in Programming
See All in Programming
Honoアップデート 2025年夏
yusukebe
1
870
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
8
3.2k
【第4回】関東Kaggler会「Kaggleは執筆に役立つ」
mipypf
0
900
Oracle Database Technology Night 92 Database Connection control FAN-AC
oracle4engineer
PRO
1
260
Ruby Parser progress report 2025
yui_knk
1
150
go test -json そして testing.T.Attr / Kyoto.go #63
utgwkk
1
110
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
210
DockerからECSへ 〜 AWSの海に出る前に知っておきたいこと 〜
ota1022
5
1.8k
AHC051解法紹介
eijirou
0
630
ソフトウェアテスト徹底指南書の紹介
goyoki
1
110
AIレビュアーをスケールさせるには / Scaling AI Reviewers
technuma
2
230
個人軟體時代
ethanhuang13
0
100
Featured
See All Featured
BBQ
matthewcrist
89
9.8k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Testing 201, or: Great Expectations
jmmastey
45
7.6k
Designing for Performance
lara
610
69k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Fireside Chat
paigeccino
39
3.6k
Typedesign – Prime Four
hannesfritz
42
2.8k
Site-Speed That Sticks
csswizardry
10
790
Code Reviewing Like a Champion
maltzj
525
40k
Visualization
eitanlees
147
16k
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