티스토리 뷰
Job Lifecycle
Job의 상태는 기본적으로 New, Active, Completing, Cancelling, Cancelled, Completed 총 6개의 상태를 가집니다.
State | isActive | isCompleted | isCancelled |
New | false | false | false |
Active | true | false | flase |
Completing | true | false | false |
Cancelling | false | false | true |
Cancelled | false | true | true |
Completed | false | true | false |
- New : Coroutine을 생성할 때 start를 Lazy로 설정한 경우 New로 시작합니다. start(), join() 등의 함수로 시작할 수 있습니다.
- Active : 기본적인 Coroutine의 상태입니다. Coroutine을 생성하고 시작했을 때 이러한 상태입니다.
- Completing : 기본적으로 Coroutine의 작업이 완료된 상태이지만, Child의 작업이 완료되지 않아 기다리는 상태입니다.
- Cancelling : 취소되는 중이다. Coroutine에 관한 자원을 반납한다.
- Cancelled : cancel()을 호출하거나 중간에 Exception이 발생하여 종료된 상태입니다.
- Completed : cancel()이나 Exception없이 종료된 상태입니다.
Cancelled vs Cancelling : isCompleted가 차이있다.
Complted vs Completing : isActive와 isCompleted가 차이있다.
정리
wait children
+-----+ start +--------+ complete +-------------+ finish +-----------+
| New | -----> | Active | ---------> | Completing | -------> | Completed |
+-----+ +--------+ +-------------+ +-----------+
| cancel / fail |
| +----------------+
| |
V V
+------------+ finish +-----------+
| Cancelling | --------------------------------> | Cancelled |
+------------+ +-----------+
Coroutine이 생성됐을 때 New로 시작합니다. (CoroutineStart를 Lazy로 설정한 경우) 이후 start(), join() 등으로 Coroutine을 실행하면 Active로 바뀌고, 작업이 완료됐지만 Children의 작업이 완료되지 않은 경우 Completing 상태로 바뀌고 Children의 상태가 모두 완료되면 Completed 상태로 바뀝니다. 만약 Coroutine 실행 중간에 cancel()이나 Exception이 발생한 경우 Cancelling 상태로 변하며, Coroutine에 관련된 자원을 반납하며 반납 후 Cancelled 상태로 바뀝니다.
'Android > Coroutine' 카테고리의 다른 글
Android Coroutine - Supervision (0) | 2022.01.16 |
---|---|
Android Coroutine - Exception (0) | 2022.01.16 |
Android Coroutine - Cancel (0) | 2022.01.08 |
Android Coroutine - Coroutine Builder (0) | 2022.01.07 |
Android Coroutine - CoroutineContext (0) | 2022.01.07 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- isActive
- null
- gradle
- 연산자
- Exception
- clean code
- ViewModelProvider
- rxjava
- Kotlin
- ConcatAdapter
- 코루틴
- ConcatAdapter.Config
- Android
- DSL
- 클린 코드
- git
- viewmodel
- 함수
- Coroutine
- Flowable
- 보이스카우트 규칙
- TDD
- Widget
- 클린코드
- observable
- ViewModelStoreOwner
- commit
- CancellationException
- Flutter
- DART
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함