Exception Coroutine에서 기본적으로 Exception 처리 방식은 전달(Propagation)과 노출(Expose)가 있습니다. launch나 actor같은 빌더는 예외가 부모 Coroutine으로 전달되고, async나 produce같은 빌더는 결과 값을 사용할 때 Exception이 노출됩니다. import kotlinx.coroutines.* @OptIn(DelicateCoroutinesApi::class) fun main() = runBlocking { val job = GlobalScope.launch { // root coroutine with launch println("Throwing exception from launch") throw IndexOutOfBoundsExcep..
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 : 기본..
cancen() & cancelAndJoin() Coroutine에서 취소가 어떻게 진행되는지 확인해봅니다. // cancel과 cancelAndJoin의 차이 public suspend fun Job.cancelAndJoin() { cancel() return join() } cancel()을 실행했을 때 취소되지 않고 Coroutine이 계속 실행됩니다. 즉 Coroutine 내부에서 진행될 때 취소를 확인하여 종료할 수 있도록 설계 해야합니다. (개발자가 직접 취소 지점을 정할 수 있습니다.) val job = CoroutineScope(Dispatchers.IO).launch { for (i in 0 until 5) { Log.d("PASS", "Running") Thread.sleep(1000L..
Coroutine Builder CoroutineScope의 확장함수로 Coroutine을 만드는 역할을 합니다. CoroutineScope(Dispatchers.IO).launch { // do something coroutine } launch() 가장 기본적인 Builder입니다. launch()는 Thread를 Blocking하지 않으며Job이라는 객체를 반환합니다. Job은 cancel(), join() 등 의 함수를 가지고 있습니다. launch의 2번때 매개변수로 CoroutineStart가 주어집니다. CoroutineStart으로 시작 방식을 지정할 수 있습니다. fun CoroutineScope.launch( context: CoroutineContext = EmptyCoroutine..
CoroutineContext CoroutineContext는 Coroutine이 어떠한 환경(Thread)에서 실행될지 결정하는 중요한 매개체입니다. CoroutineScope를 만들거나 CoroutineBuilder로 새로운 Coroutine을 만들 때 주로 쓰입니다. 즉 Coroutine Context를 통해 어떠한 Thread로 Dispatch될지 결정합니다. Thread Pool 직접 Thread Pool을 만들고 해당 Thread Pool에서 작동하는 Dispatcher를 만들 수 있습니다. (Dispatcher는 CoroutineContext를 상속받습니다.) val dispatcher = newFixedThreadPoolContext(10, "New Fixed Thread") Corouti..
Scope CoroutineBuilder(launch, async)를 생성하는 범위이다. CoroutineBuilder를 통해 만들어진 Coroutine들은 기본적으로 해당 Scope의 Context를 전달받는다. 즉 Scope는 Coroutine을 만들 수 있는 범위이며, cancel같은 함수로 해당 Scope의 Coroutine을 관리할 수 있다. val scope = CoroutineScope(Dispatchers.IO) val job = scope.launch { // 기본적으로 스코프의 Context 영향을 받는다. (IO) launch { // 상위 스코프의 Context를 가져온다. (IO) } launch(Dispatchers.Main) { // Context를 재정의 할 수 있다. (Ma..
Coroutine Coroutine은 동기/비동기를 효율적으로 프로그래밍하기 위한 하나의 동시성 프로그래밍 설계 개념입니다. Kotlin뿐만 아니라 다른 언어에도 존재하는 개념이고 오래된 개념입니다. Android에서 Coroutined은 비동기적으로 실행되는 코드를 간결하게 작성할 수 있고, Thread보다 성능이 좋으며, Jetpack에서 많은 기능을 지원하는 장점이 있습니다. Thread vs Coroutine Thread는 고유한 Stack가 할당되며 동시성을 보장하기 위해 OS가 스케쥴링을 하여 적합한 Thread를 실행하고 Context Switching으로 인한 오버헤드가 발생하고 중지된 Thread는 OS의 선택을 받기 위해 기다립니다(Blocking한다고 표현함). Coroutine은 L..

안드로이드에서 Fragment가 서로 같은 ViewModel을 공유하기도 하며, Configure Change가 발생해도 ViewModel을 유지합니다. ViewModelProvider를 사용하기 때문에 가능한데 어떻게 동작하는지 확인할 것입니다. 2021.12.06 - [Android/Lifecycle] - Android ViewModel - Activity가 ViewModel을 유지하는 방법 2021.12.29 - [Android/Lifecycle] - Android ViewModel - Fragment가 ViewModel을 유지하는 방법 ViewModelProvider 생성 public constructor( owner: ViewModelStoreOwner ) : this(owner.viewMode..
- Total
- Today
- Yesterday
- DSL
- isActive
- gradle
- observable
- Widget
- DART
- null
- Android
- 클린 코드
- rxjava
- 연산자
- ViewModelStoreOwner
- ViewModelProvider
- TDD
- Flutter
- 보이스카우트 규칙
- commit
- 함수
- Exception
- git
- CancellationException
- Flowable
- 클린코드
- viewmodel
- clean code
- Kotlin
- ConcatAdapter.Config
- 코루틴
- ConcatAdapter
- Coroutine
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |