👉 Paging 3 library overview | Android デベロッパー | Android Developers
「ページングライブラリ」は、ローカルストレージやネットワーク経由のより大きなデータセットを読み込みページを表示する処理に使います。これを使うことで、ネットワーク帯域幅とシステムのリソースを効果的に使うことができます。Android app architecture にフィットするように設計されており、他の JetPack コンポーネントとも綺麗に統合することができます。
メリット
ページングライブラリには以下の機能があります。
- ページ分けされたデータのメモリーキャッシュ化。システムリソースを効果的に使います、
- 重複リクエストの排除。ネットワーク帯域とシステムリソースを効果的に使います。
- 設定可能な指導リクエスト付き RecyclerView Adapter。ロード済みデータとスクロールを考慮。
- Kotlin coroutine と Flow を最優先。LiveData や RxJava のように利用可能。
- リフレッシュやリトライを含んだエラーハンドリング。
👉 componentid:413106 status:open - Issue Tracker
設定
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 レイヤー
ここでは、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
👉 architecture-components-samples/PagingSample at paging3 · android/architecture-components-samples
👉 architecture-components-samples/PagingWithNetworkSample at paging3 · android/architecture-components-samples