lazylifecycle回調是一個簡單的框架,可以推遲您的非基本任務,並從屏幕啟動路徑中進行初始分配,同時維護Android生命週期回調的相同執行保證。
首先抽獎:啟動應用程序時,Play Store會跟踪寒冷,溫暖和熱的發射號碼。它通過測量您的應用程序能夠繪製第一幀的速度來做到這一點。應用程序可以通過啟動器,通知,深鏈接等啟動,並且每個應用程序都可以將用戶放入不同的屏幕中。當LogCat上顯示“顯示”標記時,應用程序被認為已渲染了第一個屏幕。在所有向上回調(例如OnCreate,Onstart和Onresume)返回之後,它總是顯示出來。
因此,任何在Ongreate,Onstart和onResume和其他向上回調(不提及諸如OnpoStresume之類的事情)中執行的代碼都有可能使屏幕啟動時間差。因此,建議從Android生命週期回調中刪除可延期代碼。
但是我們應該在哪裡移動呢?我們可以按需做事,但是並非所有事情都可以移動。例如,您想開始進行N/W呼籲盡快獲取圖像。在這裡,我們不希望它在屏幕的渲染髮生時啟動,但是屏幕呈現佔位符視圖時,我們需要啟動N/W-DB調用。假設您想加載來自DB的電子郵件的草稿,首先我們要渲染撰寫屏幕,然後開始獲取草稿。
這些回調的順序按照Android維護。在一項活動中,OnlazyCreate()將在lazystart()上進行,然後是onlazyresume()。在片段中,OnlazyCreate()將隨後是OnViewCreatedLazy(view),然後是Onlazystart(),然後是OnlazyResume()。我想到的一件事是,所有懶惰的回調發生在滿足懶惰生命週期經理的觸發器之後。他們不會與Android生命週期回調相交。
將以下代碼添加到build.gradle文件dependencies { implementation 'com.github.microsoft:LazylifecycleCallbacks:v1.0' }
LazyLifecycleCallbacks接口(優先考慮BaseActivity ),並提供該方法的默認實現。onCreate()中創建lazylifecyclemanager的實例。onResume中致電lifecycleManager.activate() ,onPause() lifecycleManager.deactivate() )supportsLazyLifecycleCallbacks()為true 。BaseActivity的其他實現可以覆蓋懶惰的生命週期回調並使用它。請參閱下面的代碼:
abstract class BaseActivity : AppCompatActivity (), LazyLifecycleCallbacks {
protected lateinit var lazyLifecycleManager : LazyLifecycleManager
override fun onCreate ( savedInstanceState : Bundle ? ) {
super .onCreate(savedInstanceState)
lazyLifecycleManager = ViewBasedLazyLifecycleManager ( this )
}
override fun onResume () {
super .onResume()
lazyLifecycleManager.activate()
}
override fun onPause () {
super .onPause()
lazyLifecycleManager.deactivate()
}
override fun onLazyCreate () {}
override fun onLazyStart () {}
override fun onLazyResume () {}
override fun supportsLazyLifecycleCallbacks (): Boolean = false
}