Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- error
- RecyclerView
- 스튜디오
- 유튜브
- 레트로핏
- studio
- 안스
- 의존성주입
- coroutine
- 안드로이드스튜디오
- 안드로이드 스튜디오
- 에러
- build
- WebView
- ADB
- Kotlin
- 웹뷰
- Android
- MVVM
- dart
- 안드로이드
- Gradle
- viewpager
- 깃헙
- Retrofit
- GIT
- image
- Github
- 코틀린
- 코루틴
Archives
- Today
- Total
코딩하는 일용직 노동자
LifecycleEventObserver를 이용한 Activity가 아닌 클래스에 라이프사이클을 연결. 본문
Activity 가 아닌 Class나 ViewModel class 에 Activity의 라이프사이클을 연결해서
onCreate(), onResume(), onPause(), onStop() 등의 상태변화를 감지하고 처리하는 방법을 알아보겠습니다.
이번 예제에서는 ViewModel 에 연결해보겠습니다.
1. app레벨의 gradle에 아래의 라이브러리들을 추가해줍니다.
implementation 'androidx.core:core-ktx:1.12.0'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.7.0'
implementation 'androidx.activity:activity-compose:1.8.2'
implementation 'androidx.lifecycle:lifecycle-viewmodel-compose:2.7.0'
2. ViewModel 에 LifecycleEventObserver interface 를 추가해줍니다.
그리고 onStateChanged() 를 구현해줍니다.
class MainViewModel: ViewModel(), LifecycleEventObserver {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
if (event == Lifecycle.Event.ON_CREATE) {
// onCreate() 이벤트 처리
Log.d("MainViewModel", "Lifecycle.Event.ON_CREATE")
} else if (event == Lifecycle.Event.ON_RESUME) {
// onResume() 이벤트 처리
Log.d("MainViewModel", "Lifecycle.Event.ON_RESUME")
} else if (event == Lifecycle.Event.ON_PAUSE) {
// onPause() 이벤트 처리
Log.d("MainViewModel", "Lifecycle.Event.ON_PAUSE")
}
}
}
3. Activity 에서 ViewModel을 생성하고, lifecycle을 연결해줍니다.
val mainViewModel = viewModel()
lifecycle.addObserver(mainViewModel)
로그를 찍어보면 성공적으로 호출되는것을 확인할 수 있습니다.
- 참고
기존에는 @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) 처럼 어노테이션을 붙이면 사용할 수 있었습니다만
지금은 Deprecated 된 상태입니다.
'안드로이드' 카테고리의 다른 글
ViewModelProvider.Factory를 이용해 파라메터가 있는 ViewModel 생성하기. (0) | 2024.03.15 |
---|---|
Compose enableEdgeToEdge를 이용해 전체화면 구현하기. (0) | 2024.03.13 |
aab, apk 빌드시 파일명 자동 생성하는 방법. (0) | 2024.01.31 |
Can't determine type for tag 빌드에러 수정 (0) | 2023.09.25 |
GoogleCloud Git - permission denied (publickey) 문제 해결 (2) | 2023.05.22 |