如何監(jiān)聽App在前臺(tái)還是后臺(tái)

背景

  1. 業(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)單接入)

  1. 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)
            }
        })
源碼分析
  1. 從圖一可以看出官方思路和我們之前是一致的,attach方法是通過(guò)application創(chuàng)建時(shí)候調(diào)用init初始化傳入上下文,這里現(xiàn)跳過(guò)不看。通過(guò)Callback監(jiān)聽App內(nèi)的activity生命周期。
圖一
  1. 從圖二分析在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é)

  1. 官方也是借鑒了我們?cè)?jīng)的思路,只不過(guò)將我們每個(gè)人所需要做的封裝起來(lái),讓他們不用寫重復(fù)的代碼了。
  2. 技術(shù)不斷迭代,人需要不斷學(xué)習(xí)進(jìn)步。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容