일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- DART
- intent
- livedata
- TEST
- viewmodel
- 계측
- Dialog
- Coroutines
- Button
- Flutter
- 앱
- textfield
- CustomScrollView
- data
- appbar
- Compose
- android
- scroll
- ScrollView
- activity
- 앱바
- tabbar
- Kotlin
- drift
- binding
- textview
- 테스트
- Navigation
- 안드로이드
- LifeCycle
- Today
- Total
Study Record
[안드로이드] lifecycle library 사용하기 본문
😶 lifecycle library 를 사용하는 이유
Activity 에서 여러가지 기능을 사용하는 경우 onStart() 에서 사작하고 onStop() 끝나는 작업이 필요하다. 음악을 재생하거나 타이머를 재생하거나 하는 작업이 예시가 될 수 있다.
앱이 기능이 많아지면서 onStart() 와 onStop() 그뿐만 아니라 다른 액티비티 수명 주기에서 해야 할 작업이 많아지면 시작하고 끝나는 코드를 적지 않아 안드로이드 리소스를 낭비하거나 버그를 일으킬 수 있다.
이러한 문제를 간소화하기 위해 나온 Android Jetpack Library 가 lifecycle library 이다.
lifecycle library 는 수명 주기 인식 구성요소를 빌드할 수 있는 클래스와 인터페이스를 제공한다. 수명 주기 인식 구성요소는 Activity 와 Fragment 같은 다른 구성요소의 수명 주기 상태 변경에 따라 작업을 실행한다. 따라서 Activity 와 Fragment 의 onStart() , onStop() 과 같은 수명 주기 관련 메서드에 작업을 직접 정의하지 않고 수명 주기 인식 구성요소를 통해 해결할 수 있다.
😶 lifecycle library 의 중요 개념
- Lifecycle owners : 라이프 사이클을 소유하고 있는 컴포넌트로 Activity 와 Fragment 를 예시로 들 수 있다. Lifecycle owners 는 LifecyclerOwner 인터페이스를 구현한다.
- Lifecycle class : lifecycle 에 변화가 일어나면 이벤트를 수신하거나 lifecycle owner 의 실제 상태를 유지한다.
- Lifecycle observers : lifecycle 상태를 관찰하고 lifecycle 이 변경될 때 작업을 수행한다. lifecycle observers 는 lifecycleObserver 인터페이스를 구현한다.
😶lifecycle library 사용해보기
새로운 TestObject 객체에 LifecycleObserver 를 상속받고 Lifecycle owner 에게 lifecycle 변수를 받고 addObserver() 로 등록하면 Lifecycle owner(Ex. Activity, Fragment) 에서 이 객체를 onStart() 에 시작시키고 onStop() 에 멈춰야할 의무를 없애준다. 함수 앞에 @OnLifecycleEvent 어노테이션을 달아주면 상태가 변할 때 자동으로 시작하고 멈춰준다.
class TestObject(lifecycle: Lifecycle) : LifecycleObserver {
init {
lifecycle.addObserver(this)
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
fun startTimer() {
...
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
fun stopTimer() {
...
}
}
+ @OnLifecycleEvent 어노테이션의 Lifecycle.Event 종류와 의미
Lifecycle owner 에서는 다음과 같이 간단하게 정의만 해주면 된다. Activity 자체에는 lifecycle 이 포함되어 있기 때문에 자기 자신의 lifecycle 을 넘겨주면 된다.
class MainActivity : AppCompatActivity() {
private lateinit var testObject: TestObject
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
...
// TestObject initialize
testObject = TestObject(this.lifecycle)
...
}
}
Activity 에서 실행하지 않아도 onStart() 와 onStop() 때 TestObject 에서 정의된 함수들이 자동으로 실행할 것이다.
'안드로이드' 카테고리의 다른 글
[안드로이드] 디버깅 살펴보기 (0) | 2023.07.03 |
---|---|
[안드로이드] 자동화 테스트 기본 사항 (0) | 2023.06.30 |
[안드로이드] terminal 에서 adb 명령어가 없을 경우 (0) | 2023.06.29 |
[안드로이드] 강제 종료 시나리오 테스트 - onSaveInstanceState() (0) | 2023.06.29 |
[안드로이드] Activity 라이프사이클(lifeCycle) 살펴보기 (0) | 2023.06.29 |