진행중인 프로젝트에서 웹뷰를 앱이 백그라운드로 내려간 후, 임의의 시간이 지나, 다시 포그라운드로 올라올때 웹뷰를 갱신해 달라는 요청이 있었습니다.
우선 앱이 백그라운드 <-> 포그라운드 시에 대한 이벤트를 받아야겠죠.
이를 위해 LifecycleEventObserver를 사용합니다.
class AppMain: Application(), LifecycleEventObserver {
override fun onCreate() {
super.onCreate()
...
ProcessLifecycleOwner.get().lifecycle.addObserver(this)
}
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) {
when(event) {
Lifecycle.Event.ON_PAUSE -> {
Log.d("AppMain", "onAppBackgrounded!!")
}
Lifecycle.Event.ON_RESUME -> {
Log.d("AppMain", "onAppForegrounded!!")
}
else -> Log.d("AppMain", "onStateChanged(): event=$event")
}
}
}
Application 클래스에 LifecycleEentObserver 를 implement 를 추가해줍니다.
그리고. onCreate() 함수에서 ProcessLifecycleOwner.get().lifecycle.addObserver(this) 코드를 통해 옵저버 등록을 해줍니다.
이렇게 해주면 onStateChanged() 함수를 통해서 앱실행과 종료시에 이벤트를 받을수 있습니다.
저는 여기에 ON_PAUSE시에 시간을 저장하고, ON_RESUME 될때 현재 시간과 비교하여 임의의 시간이 지났는지를 체크하여 웹뷰를 갱신해 주었습니다.
구글링을 하던중에 DefaultLifecycleObserver 를 보게 되었습니다.
Activity의 lifecycle의 이벤트를 받을 수 있는 클래스입니다.
이걸 이용해서 viewmodel에서 사용한다면, onCreate()시에 데이터 로딩이나, onResume() 시에 데이터 갱신 등의 처리를 viewmodel 내에서 자동으로 처리가 가능할 것 같았습니다.
지난 게시물에서 구현했던 sortedWith 구현 내용을 이용해서 개발해보기로 합니다.
[Android + Kotlin] sortedWith() 로 멀티 조건 정렬을 해보자.
최근에 현업 프로젝트에서 정렬을 하는 기능이 있어서, 구현 내용을 공유하고자 합니다. 서버에서 전체 목록을 받은 후, 이를 점수로 정렬한 후에, 같은 점수 내에서 이름순으로 정렬하는 기능
heeeju4lov.tistory.com
class SortedWithExampleViewModel : ViewModel(), DefaultLifecycleObserver {
...
override fun onStart(owner: LifecycleOwner) {
super.onStart(owner)
viewModelScope.launch {
fetchUserScoreList()
}
}
override fun onDestroy(owner: LifecycleOwner) {
super.onDestroy(owner)
}
// 데이터 요청
fun fetchUserScoreList() {
...
}
}
viewmodel에 DefaultLifecycleObserver 를 implement 합니다.
그리고, onStart() 함수를 추가하고, 기존에 Activity 에서 데이터 요청 함수(fetchUserScoreList())를 하도록 구현합니다.
override fun initViewModel() {
super.initViewModel()
...
lifecycle.addObserver(viewModel)
}
Activity의 onCreate()에서 lifecycle.addObserver(viewModel) 코드로 lifecycle에 옵져버 등록을 해줍니다.
그러면, activity가 시작시에 viewmodel에 onStart() 가 호출이되어 자동으로 데이터 요청을 하여, 화면에 데이터를 표시합니다.
lifecycle 관련해서 자주 사용할 일은 없겠지만, 알아두면 요긴하게(?) 사용할 수 있으니 시간 남으실때 해보시는 것을 추천드립니다.
전체 개발 코드는 아래 Github 링크를 확인해주세요.
GitHub - rcbuilders/RemindSampleApp: https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함.
https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함. - GitHub - rcbuilders/RemindSampleApp: https://heeeju4lov.tistory.com/ 블로그에서 Android + Kotlin 강좌에서 사용함.
github.com
![](https://t1.daumcdn.net/keditor/emoticon/friends1/large/025.gif)
'Android + Kotlin' 카테고리의 다른 글
[android + Kotlin] Runtime에 View 속성 확인 라이브러리 (for 디자이너 협업) (0) | 2022.05.30 |
---|---|
[Android + Kotlin] startActivityForResult 의 Deprecated 를 해결하자. (0) | 2022.05.10 |
[Android + Kotlin] sortedWith() 로 멀티 조건 정렬을 해보자. (0) | 2022.05.03 |
[Android + Kotlin] 날짜/시간 <-> currentTimeMillis 변환 및 format 표시 (1) | 2022.03.29 |
[Android Kotlin] Webview 디렉토리 충돌 관련 수정 방법 (https://crbug.com/558377) (0) | 2022.03.18 |