Lazylifecycle 콜백은 비 필수 작업을 연기하는 간단한 프레임 워크이며, Android 라이프 사이클 콜백의 동일한 실행 보증을 유지하면서 화면 실행 경로에서 초기화를 연기합니다.
첫 번째 드로우 : 앱이 출시되면 Play Store는 차갑고 따뜻하며 뜨거운 런칭 번호를 추적합니다. 또한 앱이 첫 번째 프레임을 얼마나 빨리 그릴 수 있는지 측정함으로써 그렇게합니다. 앱은 런처, 알림, deeplinks 등을 통해 시작할 수 있으며 각각은 사용자를 다른 화면에 착륙시킬 수 있습니다. 앱은 "표시된"마커가 logcat에 표시되면 첫 번째 화면을 렌더링 한 것으로 간주됩니다. 그것은 OnCreate, OnStart 및 OnResume과 같은 모든 상향 콜백이 항상 나타났습니다.
따라서 OnCreate, OnStart 및 OnResume에서 실행되는 모든 코드 및 기타 상향 콜백 (OnPostresume과 같은 것을 언급하지 않음)은 화면 시작 시간을 악화시킬 가능성이 있습니다. 따라서 Android 라이프 사이클 콜백에서 지연된 코드를 제거하는 것이 좋습니다.
그러나 우리는 그것을 어디로 움직여야합니까? 우리는 주문형 일을 할 수 있지만 모든 일을 전달할 수있는 것은 아닙니다. 예를 들어, N/W가 가능한 빨리 이미지를 가져 오기위한 전화를 시작하려고합니다. 여기서는 화면의 렌더링이 발생하는 동안 시작하기를 원하지 않지만 순간 화면이 자리 표시 자보기로 렌더링되면 N/W-DB 통화를 시작해야합니다. DB에서 이메일 드래프트를로드하려고한다고 가정하십시오. 먼저 Compose Screen을 렌더링 한 다음 드래프트를 가져 오기 시작합니다.
이러한 콜백의 순서는 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
}