이어지는 글 [Android] RecyclerView Deep Dive - 1. RecyclerView 정의와 동작원리 및 생명주기 개요 이전에 RecyclerView에 대한 글을 정리한 적이 있었다. 당시에는, RecyclerView의 등장 의의와 RecyclerView를 사용하는 경우에 구현해야 하는 구현부에 대한 내용을 중심으로 작성했었다. 2022.12.22 - [I hodie.tistory.com RecyclerView.ViewHolder에서의 ViewTreeLifecycleOwner 사용 참고: https://pluu.github.io/blog/android/2021/09/20/lifecycleowner/ 기존 ViewTreeLifecycleOwner 사용시 기존 onBindViewHolder..
개요 이전에 RecyclerView에 대한 글을 정리한 적이 있었다. 당시에는, RecyclerView의 등장 의의와 RecyclerView를 사용하는 경우에 구현해야 하는 구현부에 대한 내용을 중심으로 작성했었다. 2022.12.22 - [IT/Android] - [Android] RecyclerView 이해하기 이외에 RecyclerView에서 사용하는 Adapter를 중심으로 알아봤었다 2022.12.23 - [IT/Android] - [Android] RecyclerView 갱신의 효율성을 높이는 방법 그러나 RecyclerView를 사용하면서, 근본적인 RecyclerView에 대한 이해를 필요로 하는 일이 늘어났고 특히, RecyclerView의 내부 동작에 대한 이해가 필요로 하는 일이 늘어..
Coroutine의 유닛 테스팅 Coroutine의 suspend Function들은 runblocking 코드블럭으로 수행하면된다. 다만, 동적으로 Scope를 만드는 경우에는 Dispatchers를 parameter를 넘겨받는 ViewModel을 사용해야 한다. Android Architecture Component와 함께 사용 Android Architecture Component와 함께 사용하면, LifeCycle 관리등 장점도 많이 있지만, 주의해야할 점들도 있다. Andorid 특징을 고려해서는 Coroutine 코드는 Viewmodel에 놓는 것이 적합하다. Job Debug Mode Debug mode에서 Job을 toString하면, 아래와 같은 형식으로 나온다. “coroutine#1”..
Structured Concurrency(구조화된 동시성) 누가 기존의 동작을 취소할 수 있는가? 해당 동작은 Application의 LifeCycle을 충분히 준수하는가? 예외가 발생하면 이를 누가 처리하는가? → 이에 대한 물음을 해소하기 위해 Coroutine은 Structed Concurrency를 내세운다. 이 개념을 베이스로 만들어진, Scope, launch나 async 블록을 사용하면, 개발자는 메모리 누수 및 동시성을 가진 Function들을 올바르게 처리할 수 있게 된다. 예시 GlobalScope.launch는 top-level Coroutine을 만든다. 비록 Light-Weight이기는 하나, 여전히 Memory를 비롯한 Resource를 사용한다. → 새롭게 luanch된 cor..