일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Library
- jobdispatcher
- Android
- alarmanager
- Service
- 빈
- Job
- shceduler
- PHP
- schedule
- workmanager
- firebase
- livedatam
- jobschduler
- epmty
- 검사
- Background
- Today
- Total
에몽이
Understanding Lifecycle in Android Architecture Components 번역 본문
LifeCycle은 무엇이고 우리가 왜 고려해야 하는가?
Lifecycle은 Android 개발을 쉽게하기위해 구글에서 발표한 여러 아키텍쳐 component중 일부이다. Lifecycle은 너의 application components를 너의 activity/fragment의 lifecycle에 따라더 잘 관리기 위한 class와 interface set을 제공한다. 그래서 너는 굉장히 유용한 architecture component인 LiveData를 배우기 전에 Lifecycle이 어떻게 작동하는이 이해해야한다.
여기 너가이 article을 보고난 뒤 반드시 잃어야할 Lifecycle에 관한 여러 예시가 official docs 에 있다.
이 article은 어떻게 component가 작동하는 지에 대한 간단한 이해를 목표로 한다.
Lifecycle Component에 대한 이해
여기에서의 기본적인 아이디어는 Android 개발자라면 이미 굉장히 친숙할 여러 이벤트(ON_CREATE,ON_PAUSE,etc)들을 발생시키는 LifecycleOwner라는 이름의 클래스이다. 이제 너는 이런 event들을 듣고, 이에따라 반응한 LifecycleObserver라는 이름의 interface를 implement할 수 있다.
지금 당장 너는 LifecycleOwner를 어떻게 만들어야 하는지에 대해 걱정할 필요 없다. 너의 activity와 fragment는 이미 이 interface를 implement하고 있다.
lifecycle의 component는 Event와 State라는 두개의 enum들이 track한다.
Event
Event는 현재 발생한 lifecycle이다. 따라서 너의 activity가 onPause가된다면 ON_PAUSE라는 이름의 event가 발생할 것이고, onStop으로 간다면 ON_STOP이벤트가 발생할 것이다. 너는 이러한 이벤트들을 확인(listen)하거나 몇몇 action(우리는 추후 이것에 대한 예시를 볼것이다.)을 취하기 위해 위해 등록(register)할 수 있다. 안드로이드 SDK에는 모든 이벤트들이 정의된 Event enum class가 있다.
State는 이름처럼 component의 현재 상태이다. 예를들어, onCreate를 호출할 때, CREATED state가 호출된다. onStart를 호출하면 STARTED state가 호출된다. 아래는 SDK에 State에 관한 Enum이다.
너는 isAtLeast라는 이름의 boolean을 return하는 function을 볼수있다. 만일 현재 state가 CREATED이고 너가 component가 started를 했는지 확인하고 싶다면, 너는 isAtLease(State.STARTED)를 호출하고, false를 리턴받을것이다.
아래는 official docs에서 보여준 Event와 State의 이미지이다.
Let’s code lifecycle
이제 Lifecycle을 action안에서 보자. 코드는 나에게 맡겨라!
비어있는 project를 열고 empty activity를 만들어라. 내가 이전에 말했듯이, LifecycleObserver 에서 발생한 lifecycle event들을 보기위해서 우리는 LifecycleObserver라는 이름의 interface를 implement받는다. 아래는 interface가 정이된 SDK 코드이다.
interface는 아무 function도 포함하고 있지 않다 :P. 그럼 너는 어떻게 event들을 확인(listen)하는가? 우리는 annotation을 사용할것이다. LifecycleObserver를 implement하는 CustomObserver라는 이름의 class를 만들자. 이제 해당 activity에서 onCreate event를 확인(listen)할 수 있도록, method를 만들고 이름을 너가 원하는대로 해라. 나는 음....onCreateEvent로 하고 @onLifecycleEvent로 annotate를 할것이다. annotation안에는 너가 어떤 event를 확인(listen)하기 원하는지 상세화하면된다. 우리는 Lifecycle.Event.ON_CREATE를 annotation에 넣을것이다.
너는 너가 원하고 확인(listen)하기 원하는 함수들을 원하는 만큼 원하는 때에 작성할 수 있다.
이제 우리는 LifecycleObserver를 LifecycleOwner에 등록해야한다. 그래야 우리는 events들을 확인(listen)할 수 있다. 이제 그것을 하기 전에, 너는 LifecycleOwner가 어디서 오는건지 의아할 수 있다. 하지만 내가 Activity와 Fragment는 이미 LifecycleOwner를 implement하고 있다고 말한것을 기억해라.
너가 만일 AppcompatActivtity의 상속부를 확인하면, SupportActivity를 확인할 수 있고, 너는 그곳에서 SupportActivity가 LifecycleOwner를 implement한것을 볼 수 있을 것이다.
아래는 Lifecycle obejct를 반환하는 getLifecycle()이라는 함수만 가지고있는 SDK의 LifecycleOwner interface이다.
너가 만일 Lifecycle을 좀더 깊게 본다면, 너는 많은 method들을 포함하고있는 abstract class와 아까 설명한 이벤트들, 그리고 status Enum class들을 확인 할 수 있다.(나는 단순화를 위해 doc의 코멘트들을 모두 삭제하였다). 그중 너는 addObserver()라는 LifecycleObserver를 파라미터로 받는 함수를 볼 수 있다. 이것이 바로 우리가 찾고있던 것이다. 우리는 우리의 CustomObserver를 이 함수를 사용해 등록할 수 있다.
이제 너의 Activity의 onCreate에서 getLifecycle()을 호출해 Lifeclycle을 얻는다. 그리고 addObserver를 호출하여 너의 새로운 observer를 추가한다.
너의 Application을 실행시켜서 log들을 확인해라. 그리고 LifecycleObserver class를 활용하여 실험해라. 너는 너의 custom LifecycleOwner를 implement하고 LifecycleRegistry를 사용하여 이벤트를 보낼 수 있다. 이건 꽤 쉬운일이고 docs here 에 잘 설명되에 있다.
Lifecycle Component는 LifeData(이것에 대해서 우리는 다음 tutorial때 배울것이다)의 작동을 이해하는데 기초가 되는 편리한 class이다. 나는 너에게 docs on Lifecycle 를 지금 읽을것을 권한다.
Get stared with Room Database in Android
Move Content to side while swiping in Navigation Drawer
출처 :
http://thetechnocafe.com/understanding-lifecycle-in-android-architecture-components/
'android' 카테고리의 다른 글
android WorkManager 번역과 예시 (0) | 2018.07.19 |
---|---|
Lifecycle-aware Components 源码分析 (1) | 2018.06.28 |
안드로이드 Intent 그리고 PendingIntent 와 Intent Sender (0) | 2018.03.12 |
명시적 intent와 암시적 intent - intent와 activity 1부 (0) | 2018.03.07 |
안드로이드 데이터베이스(DB) 프로그래밍 4. [SQLiteOpenHelper 사용 예제] (Android Database 4) 출처: http://recipes4dev.tistory.com/124 [개발자를 위한 레시피] (0) | 2018.03.05 |