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