👉 Paging 3 library overview | Android デベロッパー | Android Developers ![](http://b.hatena.ne.jp/entry/image/https://developer.android.com/topic/libraries/architecture/paging/v3-overview?hl=ja)
「ページングライブラリ」は、ローカルストレージやネットワーク経由のより大きなデータセットを読み込みページを表示する処理に使います。これを使うことで、ネットワーク帯域幅とシステムのリソースを効果的に使うことができます。Android app architecture にフィットするように設計されており、他の JetPack コンポーネントとも綺麗に統合することができます。
メリット
ページングライブラリには以下の機能があります。
- ページ分けされたデータのメモリーキャッシュ化。システムリソースを効果的に使います、
- 重複リクエストの排除。ネットワーク帯域とシステムリソースを効果的に使います。
- 設定可能な指導リクエスト付き RecyclerView Adapter。ロード済みデータとスクロールを考慮。
- Kotlin coroutine と Flow を最優先。LiveData や RxJava のように利用可能。
- リフレッシュやリトライを含んだエラーハンドリング。
👉 componentid:413106 status:open - Issue Tracker ![](http://b.hatena.ne.jp/entry/image/https://issuetracker.google.com/issues?q=componentid:413106%20status:open&hl=ja)
設定
build.gradle に以下のようにして dependencies に追加します。
dependencies {
def paging_version = "3.0.0-alpha01"
implementation "androidx.paging:paging-runtime:$paging_version"
// alternatively - without Android dependencies for tests
testImplementation "androidx.paging:paging-common:$paging_version"
// optional - RxJava2 support
implementation "androidx.paging:paging-rxjava2:$paging_version"
// optional - Guava ListenableFuture support
implementation "androidx.paging:paging-guava:$paging_version"
}
構成
Paging ライブラリは、推奨されている Android app architecture に直接統合できます。ライブラリコンポーネンツはアプリの中で3つのレイヤーを持っています。
- Repository レイヤー
- ViewModel レイヤー
- UI レイヤー
![](https://i0.wp.com/android.benigumo.com/wp-content/uploads/2020/06/6b288b9d90de0e584bfef6f8e5d006ce.png?ssl=1)
ここでは、Pagingライブラリコンポーネントがそれぞれのレイヤーでどのように組み合わせてく使われ、データ読み込みからページを表示するまでを説明します。
Repository レイヤー
Repository レイヤーで、主要な Pagingライブラリコンポーネントとなるのが PagingSource です。それぞれの PagingSource オブジェクトはデータソースとそれをどう走査するかを定義します。PagingSource オブジェクトは、ネットワークやローカルデータベースなど一つのソースからデータをロードします。
もうひとつは、RemoteMediator です。 これは、ネットワークデータソースとローカルデータキャッシュのようなレイヤー分けされたデータからのページングを管理します。
ViewModel レイヤー
Pager コンポーネントは、PagingSource や PagingConfig オブジェクトから PagingData インスタンスを作成するためのパブリックなAPIを提供します。
ViewModelレイヤーとUIを接続するコンポーネントは、PagingData です。PagingData オブジェクトは、ページ付けされたスナップショットのコンテナです。PagingSourceオブジェクトに問い合わせし、その結果を保持します。
UI レイヤー
UIレイヤーで主要ページングライブラリコンポーネントは、PagingDataAdapterです。RecyclerView のアダプターでページ付けされたデータを取り扱います。
代替として、 独自のカスタムアダプターを作るのに AsyncPagingDataDiffer コンポーネントを使うこともできます。
その他
ページングライブラリについてもっと学ぶために、以下のリソースも参照してください。
👉 Android Paging ![](http://b.hatena.ne.jp/entry/image/https://codelabs.developers.google.com/codelabs/android-paging/#1)
👉 architecture-components-samples/PagingSample at paging3 · android/architecture-components-samples ![](http://b.hatena.ne.jp/entry/image/https://github.com/android/architecture-components-samples/tree/paging3/PagingSample)
👉 architecture-components-samples/PagingWithNetworkSample at paging3 · android/architecture-components-samples ![](http://b.hatena.ne.jp/entry/image/https://github.com/android/architecture-components-samples/tree/paging3/PagingWithNetworkSample)