
先把結論放在前面:Paging 的核心價值不是"幫你翻頁",而是"幫你把數(shù)據(jù)流做對"——它把"頁"這個概念從 UI 層下沉到數(shù)據(jù)源,讓上拉加載、錯誤重試、緩存命中、預取這些原本靠手寫狀態(tài)機處理的邏輯,變成一條聲明式的Flow。能講出"Paging 把狀態(tài)機從 UI 移到了庫內部",就說明理解了它的設計意圖。面試里"你在項目里怎么用 Paging"這題,答不好的原因通常不是知識不夠,而是沒有把做過的事按"場景、做法、結果"梳理過。本文給出的結構就是:場景(數(shù)據(jù)量與分頁維度)→ 做法(PagingSource vs PagingDataFactory 的選擇)→ 結果(首屏時間、內存、錯誤率的變化)。三個核心角色與它們的分工PagingSourceInt, T —— 數(shù)據(jù)源:怎么按頁取 ├─ key: PageKey = 頁碼 / offset / prevKey|null ├─ load(key): LoadResult.Page(data, prevKey, nextKey) └─ 關鍵:nextKey == null 表示數(shù)據(jù)到底了 Pager(flow, config) —— 配置:每頁多大、預取多遠、占位符策略 └─ config: PagingConfig(pageSize, prefetchDistance, initialLoadSize, enablePlaceholders, maxSize) PagingDatal