背景
- 業(yè)務(wù)很多時(shí)候都需要監(jiān)聽App處于前臺(tái)還是后臺(tái)進(jìn)行業(yè)務(wù)邏輯處理,以前我們通用做法是通過(guò)通過(guò)application注冊(cè)監(jiān)聽activity生命周期回調(diào),用onResume和onStop的次數(shù)來(lái)判斷大小就可以得出App此刻在前臺(tái)還是后臺(tái)。
官方支持(更為簡(jiǎn)單接入)
- Android官網(wǎng)深知我們開發(fā)的訴求,現(xiàn)已通過(guò)ProcessLifecycleOwner 官方類支持給開發(fā)者回調(diào)app處于前臺(tái)還是后臺(tái)了,通過(guò)給ProcessLifecycleOwner注冊(cè)listener,當(dāng)應(yīng)用回到前臺(tái)時(shí)候就會(huì)回調(diào)onResume,當(dāng)應(yīng)用切到后臺(tái)回調(diào)onPause。
ProcessLifecycleOwner.get().lifecycle.addObserver(object: DefaultLifecycleObserver {
override fun onResume(owner: LifecycleOwner) {
//應(yīng)用在前臺(tái)
}
override fun onPause(owner: LifecycleOwner) {
//應(yīng)用在后臺(tái)
}
})
源碼分析
- 從圖一可以看出官方思路和我們之前是一致的,attach方法是通過(guò)application創(chuàng)建時(shí)候調(diào)用init初始化傳入上下文,這里現(xiàn)跳過(guò)不看。通過(guò)Callback監(jiān)聽App內(nèi)的activity生命周期。

圖一
-
從圖二分析在activityPaused和activityResumed函數(shù)里面只不過(guò)是統(tǒng)計(jì)activity的resume和pause的回調(diào),當(dāng)resume的次數(shù)為0的時(shí)候,postDelay 700ms,這里的700ms我感覺是為了避免那種快速退到后臺(tái)又返回的,這種情況就不返回App退到后臺(tái)狀態(tài)給開發(fā)者了。
圖二
總結(jié)
- 官方也是借鑒了我們?cè)?jīng)的思路,只不過(guò)將我們每個(gè)人所需要做的封裝起來(lái),讓他們不用寫重復(fù)的代碼了。
- 技術(shù)不斷迭代,人需要不斷學(xué)習(xí)進(jìn)步。
