Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- kotlin
- c++
- program
- Reflect
- Chrono
- design pattern
- SHA512
- ChromeTab
- AES
- go
- Functional
- Clojure
- ranges
- sha256
- async
- Observer
- type_traits
- haskell
- stringprintf
- sprintf
- web
- WebView
- Scala
- Android
- SHA1
- template
- coroutines
- CustomTab
- traits
- RAII
Archives
- Today
- Total
프로그래밍 검색 블로그
코틀린 비동기 async 본문
코틀린 베타로 비동기 관련 Api 가 추가되었다
문법으로는 C#의 async/await의 코틀린식 구현이라고 볼수 있다
베타를 비동기 Api를 사용하기 위해 그레들 설정부터 보자면
현재 코틀린 버전을 1.2.21 혹은 그 이상으로 맞춰준다
1 | ext.kotlin_version = '1.2.21' | cs |
dependencies에 코루틴 api 를 추가한다
현재는 베타라서 필요하지만 미래에는 필요 없을수도 있다
1 | compile "org.jetbrains.kotlinx:kotlinx-coroutines-core:0.22.2" | cs |
1. 비동기 API
async 는 비동기로 동작하고 블럭 안에 있는 것을 비동기로 수행한다
간단하게 textview 글자를 바꿔주는걸로 시작해본다
launch 도 비슷한 기능을 수행하지만 코틀린 공식 홈페이지에 존재하지 않아서
앞으로 삭제될 가능성이 있어 적지 않았다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) async { //Thread.sleep Log.e(TAG,"before") delay(5000) //비동기라서 View.post 를 호출해서 구현해야 한다 textView.post { textView.text = "call async" } Log.e(TAG,"after") } } | cs |
2. 비동기 함수
직접 비동기 함수를 만들려고 한다면 바로 async를 반환하는 방법으로 만들수 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | fun calc() = async { delay(3000) val s = (1..1000).sum() return@async s } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) async { val executeSum = calc() Log.e(TAG,"before") delay(5000) val sum = executeSum.await() textView.post { //비동기라서 View.post 를 호출해서 구현해야 한다 textView.text = "call async" + sum } Log.e(TAG,"after") } } | cs |
val executeSum = calc()이 호출된 후 before 로그가 찍히고
val sum에서 Int를 받은 후에 textView에 찍게 된다
3. 동기적인 함수에서 비동기 호출 계산을 끝내기
계산 결과를 출력하기 위해서 동기적인 함수에서 비동기 작업들을 일괄적으로 끝내야 할 때가 있는데
그때 함수의 앞에 suspend 키워드를 사용한다
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 | suspend fun calc() : Int{ val c = async { delay(3000) val s = (1..1000).sum() return@async s } return c.await() } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) async { Log.e(TAG,"before") delay(5000) val sum = calc() textView.post { //비동기라서 View.post 를 호출해서 구현해야 한다 textView.text = "call async" + sum } Log.e(TAG,"after") } } | cs |
'Android' 카테고리의 다른 글
안드로이드 WebView 대신 Chrome Tab 사용 (1) | 2019.03.23 |
---|---|
코틀린 파일 MD5 SHA1 SHA256 SHA512 (0) | 2018.05.30 |
안드로이드 SQLite 사용 Create, Index (0) | 2018.02.12 |
안드로이드 REST API / JSON 파싱 (0) | 2017.12.31 |
안드로이드 웹뷰 성능 향상 (0) | 2017.12.30 |
Comments