본문 바로가기

프로그래밍 놀이터2030

[Kotlin] Coroutine 소개 https://www.slideshare.net/elizarov/introduction-to-kotlin-coroutines -Coroutine 개념은 아주 오래된 녀석이다.Simula 67 이란 언어에서 처음으로 소개된 개념이다. detach : suspension statement resume : resume coroutine execution -Coroutine 은 multithreading 이 나오면서 잠시 out 되어있었다.그러나 최근에 async code 가 많이 사용되면서 다시 주목받기 시작했다. -Thread 는 resource 측면에서 high-load 이며,single thread 만 지원하는 언어들도 있으며,mutable state 가 많고, UI operation 같이 thread .. 2020. 8. 24.
[Kotlin] Coroutine 은 어떻게 동작하는가? 코루틴은 어떻게 동작하는가? -돼욍 CommentCoroutine 이 StateMachine 형태로 동작함을 rough 하게 이해할 수 있다.StateMachine 의 상태 변화에 따라 값을 save & fetch 한다는 것을 rough 하게 이해할 수 있다.Continuation 이라는 것을 재활용해 Dispatcher 를 포함한 context 를 계속 물고 갈 수 있음을 rough 하게 이해할 수 있다. -Kotlin 의 Coroutine 은 suspend 키워드로 마킹된 함수를 CPS(Continuation Passing Style)로 변환하고, 이를 Coroutine Builder 를 통해 적절한 스레드 상에서 시나리오에 따라 동작하도록 구성된다. -suspend function 은 스레드와 스케.. 2020. 8. 23.
[android] AsyncLayoutInflater tutorial https://developer.android.com/reference/androidx/asynclayoutinflater/view/AsyncLayoutInflater -androidx 에 포함되어 있다.inflate 하는 동안에도 UI 를 responsive 하게 가져갈 수 있다는 장점이 있음 -AsyncLayoutInflater(this).inflate(resId:Int, parent:ViewGroup, listener:OnInflateFinishedListener?) -AsyncLayoutInflater 의 단점은 아래와 같다.parent 의 generateLayoutParams() 가 thread-safe 해야 한다.모든 뷰가 Handler 를 생성하거나 Looper.myLooper() 함수를 호.. 2020. 8. 22.
[android] WorkManager 를 사용해보자 https://www.bignerdranch.com/blog/doing-work-with-androids-new-work-manager/https://developer.android.com/topic/libraries/architecture/workmanagerhttps://developer.android.com/reference/androidx/work/WorkManager -https://developer.android.com/jetpack/androidx/versions 글을 정리하는 20.07.14 시점에는 2.3.4 release 상태 -Google 이 2018 I/O 에서 WorkManager 라는 것을 발표했다.그 전에는 background task 를 수행하기 위해서는 여러가지 배경지식이 .. 2020. 8. 21.
[android] MultiDex 에 대한 이야기 https://developers.soundcloud.com/blog/congratulations-you-have-a-lot-of-code-remedying-androids-method-limit-part-1 https://developer.android.com/studio/build/multidex.html - DEX file 의 method index 는 16bit 로 제한되어 있다. 이는 2^16 인 65,536 갯수 이상의 method reference 를 가질 수 없다는 것이다. 이 숫자에는 android framework methods, library methods, 그리고 너의 코드에 있는 methods 를 포함한 것이다. 64K 가 많아보이지만, android support lib 을 비롯.. 2020. 8. 20.
[android] Room 에 대해 알아보자 - Define data using entities https://developer.android.com/training/data-storage/room/defining-data -Room 을 사용할 때 entity 들을 정의하게 된다.각각의 entity 는 Database 의 table 에 매칭된다.Database class 에 entities array 로 제공하면 자동으로 생성된다. -@Entity data class User(@PrimaryKey var id:Int, var firstName:String?, var lastName:String?) -field 를 public 으로 만들거나, getter, setter 를 제공해주면 된다.getter, setter 를 사용할 경우, JavaBeans convention 을 따른다는 것을 알고 써야 한.. 2020. 8. 19.
[android] Room 에 대해 알아보자 - Accessing data using Room DAOs https://developer.android.com/training/data-storage/room/accessing-data -Dao 는 Room 의 메인 컴퍼넌트로, 각각의 DAO 는 app db 에 접근하는 추상적인 방법을 제공한다.직접 query 하거나 queryBuilder 를 통해 data 에 접근하는 대신, 각각의 컴퍼넌트에 대해 분리된 접근을 할 수 있다.게다가 DAO 는 test 를 위한 mock db access 를 제공하기가 쉬워진다. -DAO 는 interface 나 abstract class 가 될 수 있다.abstract class 라면, constructor 를 통해서 RoomDatabase 를 유일한 param 으로 받을 수 있다.Room 은 각각의 DAO 를 compile.. 2020. 8. 18.
[android] Room 에 대해 알아보자 - 기초 https://developer.android.com/jetpack/androidx/releases/roomhttps://developer.android.com/training/data-storage/room/index.html -Room 은 SQLite 의 추상화 layer 를 제공하는 lib 으로, SQLite 의 모든 기능을 사용하면서 더 견고한 db 접근을 할 수 있게 해준다. -Room 이 많은 부분을 케어해주기 때문에, SQLite 대신에 Room 을 사용하는 것이 강추된다. -Room 에는 3가지 컴퍼넌트가 있다. 1. Database DB holder 를 가지고 있으며, 앱의 relational 한 영구적인 data 에 접근하는 채널이 된다. @Database 로 annotate 된 cla.. 2020. 8. 17.
[coroutine] java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. 'kotlinx-coroutines-android' -coroutine 을 사용한 project 에서 release build (minify 포함) 을 하면 아래와 같은 exception 이 발생하며 crash 가 발생한다.java.lang.IllegalStateException: Module with the Main dispatcher is missing. Add dependency providing the Main dispatcher, e.g. 'kotlinx-coroutines-android’ -범인은 바로 proguard.proguard 파일은 version 에 따라 바뀔지 모르지만, 아래 링크를 참조하면 최신정보를 계속 얻을 수 있지 않을까 싶다. https://github.com/Kotlin/kotlinx.coroutines/blob/maste.. 2020. 8. 16.