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
440
Paging2から3に移行した話
Zli × CA 合同LT にて発表
Yuta Tomiyama
August 22, 2020
Tweet
Share
More Decks by Yuta Tomiyama
See All by Yuta Tomiyama
ビルドプロセスをデバッグしよう!
yt8492
0
170
モバイルアプリ開発を始めよう!
yt8492
0
69
Git勉強会
yt8492
0
150
なんでもやってみる勇気
yt8492
0
100
Android Autoが思ったよりしんどい話
yt8492
0
210
apollo-kotlinにcontributeした話
yt8492
0
150
DMM TVのSDカードダウンロード機能を実装した話
yt8492
1
870
今だからこそ知りたいKotlin Multiplatform
yt8492
0
300
State management and API calls in Jetpack Compose: Learning Apollo + Jetpack Compose through React Hooks
yt8492
0
1.3k
Other Decks in Programming
See All in Programming
퇴근 후 1억이 거래되는 서비스 만들기 | 내가 AI를 사용하는 방법
maryang
1
160
Ktorで簡単AIアプリケーション
tsukakei
0
120
TransformerからMCPまで(現代AIを理解するための羅針盤)
mickey_kubo
7
5.8k
SODA - FACT BOOK(JP)
sodainc
1
9k
Vue 3.6 時代のリアクティビティ最前線 〜Vapor/alien-signals の実践とパフォーマンス最適化〜
hiranuma
2
340
三者三様 宣言的UI
kkagurazaka
0
320
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
380
AsyncSequenceとAsyncStreamのプロポーザルを全部読む!!
s_shimotori
1
190
Pythonに漸進的に型をつける
nealle
1
140
Designing Repeatable Edits: The Architecture of . in Vim
satorunooshie
0
200
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
710
オンデバイスAIとXcode
ryodeveloper
0
350
Featured
See All Featured
The Invisible Side of Design
smashingmag
302
51k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
The Cult of Friendly URLs
andyhume
79
6.6k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.7k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
A Tale of Four Properties
chriscoyier
161
23k
Facilitating Awesome Meetings
lara
57
6.6k
A better future with KSS
kneath
239
18k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.5k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
BBQ
matthewcrist
89
9.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