반응형
LifecycleObserver
설명
- Activity의 onCreate, onDestroy와 같은 생명 주기 메소드를 별도로 분리하여 Activity 코드를 간결하게 유지할 수 있도록 해주는 클래스
- background, foreground 상태 체크를 위해서 Application에 LifecycleObserver를 적용할 수 있다.
Activity에 적용하는 예제
ActivityLifecycleObserverclass ActivityLifecycleObserver(private val lifecycle: Lifecycle) : LifecycleObserver {
companion object {
const val TAG = "[DEBUG]"
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
fun onCreated(source: LifecycleOwner) {
Log.d(TAG, "onCreated")
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onStart() {
Log.d(TAG, "onStart")
if (lifecycle.currentState.isAtLeast(Lifecycle.State.INITIALIZED)) {
Log.d(TAG, "currentState is greater or equal to INITIALIZED")
}
if (lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED)) {
Log.d(TAG, "currentState is greater or equal to CREATED")
}
if (lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED)) {
Log.d(TAG, "currentState is greater or equal to STARTED")
}
if (lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED)) {
Log.d(TAG, "currentState is greater or equal to RESUMED")
}
if (lifecycle.currentState.isAtLeast(Lifecycle.State.DESTROYED)) {
Log.d(TAG, "currentState is greater or equal to DESTROYED")
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun onResume() {
Log.d(TAG, "onResume")
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun onPause() {
Log.d(TAG, "onPause")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onStop() {
Log.d(TAG, "onStop")
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
fun onDestroy() {
Log.d(TAG, "onDestroy")
}
}
MainActivity
class MainActivity : AppCompatActivity() {
private var observer = ActivityLifecycleObserver(lifecycle)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
lifecycle.addObserver(observer)
}
}
Application에 적용하는 예제
build.gradledependencies {
....
implementation "android.arch.lifecycle:extensions:1.1.1"
}
ApplicationLifecycleObserver
class ApplicationLifecycleObserver : LifecycleObserver {
companion object {
const val TAG = "[DEBUG]"
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun onForeground() {
Log.d(TAG, "onForeground")
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun onBackground() {
Log.d(TAG, "onBackground")
}
}
AppApplication
class AppApplication : Application() {
override fun onCreate() {
super.onCreate()
ProcessLifecycleOwner.get().lifecycle.addObserver(ApplicationLifecycleObserver())
}
}
AndroidManifest.xml
<application ... android:name=".AppApplication">...</application>
참고
반응형
'Development > Android' 카테고리의 다른 글
[Android] ExoPlayer (0) | 2021.02.10 |
---|---|
[Android] ViewTreeObserver (0) | 2021.02.10 |
[Android] BuildConfig (0) | 2021.02.09 |
[Android] meta-data (0) | 2021.02.09 |
[Android] Kotpref (0) | 2021.02.09 |