Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Briefly Introduction of Kotlin coroutines
Search
Elvis Lin
October 19, 2018
Programming
330
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Briefly Introduction of Kotlin coroutines
Introduce basic concepts of Kotlin coroutines
Elvis Lin
October 19, 2018
More Decks by Elvis Lin
See All by Elvis Lin
Protect Users' Privacy in iOS 14
elvismetaphor
0
63
Dubugging Tips and Tricks for iOS development
elvismetaphor
0
80
Strategies of Facebook LightSpeed project
elvismetaphor
0
120
Background Execution And WorkManager
elvismetaphor
2
530
作為一個跨平台的 Mobile App 開發者,從入門到放棄!?
elvismetaphor
2
570
Dependency Injection for testability of iOS app
elvismetaphor
1
1.5k
MotionLayout Brief Introduction
elvismetaphor
1
380
Chapter 10. Pattern Matching with Regular Expressions
elvismetaphor
0
81
Machine Learning Application on Mobile Devices
elvismetaphor
0
150
Other Decks in Programming
See All in Programming
How I Stole PSI from Android Studio - DroidKaigi2026
worker8
0
120
Security issues being discussed on Web Platforms
petamoriken
0
930
App Intentsのビルドプロセスを支える技術
kntkymt
0
360
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
1
450
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
620
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
150
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
3
340
Are APIs Still Relevant in the AI Era?
soyuka
0
200
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
360
テストを司るデーモンに会いに行く 〜隔離した仮想マシンでテストを通すまで〜
h1d3mun3
1
350
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
250
スマート反転とウェブアクセシビリティ
camiha
0
210
Featured
See All Featured
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
Raft: Consensus for Rubyists
vanstee
141
7.7k
What's in a price? How to price your products and services
michaelherold
247
13k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
600
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
330
The Curse of the Amulet
leimatthew05
3
14k
We Have a Design System, Now What?
morganepeng
55
8.3k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
RailsConf 2023
tenderlove
30
1.5k
The untapped power of vector embeddings
frankvandijk
2
1.9k
Transcript
Kotlin Coroutines, 從入⾨門到入⾨門 Elvis Lin(@elvismetaphor) Taiwan 2018 #JCConf
關於我 • Elvis Lin • Android, iOS 與 React Native
永遠的初學者 • Twitter: @elvismetaphor • Blog: https://blog.elvismetaphor.me #JCConf Taiwan 2018
⼤大綱 • 循序處理理 • 並⾏行行處理理與Multi-thread • Why Coroutines? • 基本的使⽤用⽅方式
#JCConf Taiwan 2018
循序處理理 #JCConf Taiwan 2018 Main
循序處理理的程式 fun main(args: Array<String>) { println("First") println("Second") println(“Third") } #JCConf
Taiwan 2018
循序處理理的程式與Thread fun main(args: Array<String>) { println("First") printDelayed(“Second") println("Third") } fun
printDelayed(message: String) { Thread.sleep(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式與 Coroutines fun main(args: Array<String>) { println(“First") runBlocking { printDelay("Second")
} println("Third") } suspend fun printDelay(message: String) { delay(1000) println(message) } #JCConf Taiwan 2018
循序處理理的程式 與 Coroutines(簡易易版) fun main(args: Array<String>) { println(“First") runBlocking {
delay(1000) println(“Second”) } println("Third") } #JCConf Taiwan 2018
並⾏行行處理理 (Multi-thread) #JCConf Taiwan 2018 Main Other
並⾏行行處理理的程式與 Thread fun main(args: Array<String>) { println("First") printNonBlocking("Second") println("Third") }
fun printNonBlocking(message: String) { Thread { Thread.sleep(1000) println(message) }.start() } // Output: First Third Second
並⾏行行處理理的程式與 coroutines fun main(args: Array<String>) { println("First") launch { printDelay("Second")
} println("Three") } suspend fun printDelay(message: String) { delay(1000) println(message) } // Output: First Third Second #JCConf Taiwan 2018
Why Coroutines #JCConf Taiwan 2018
Coroutines • Coroutines are like very light-weight thread • Coroutines
computations can be done without blocking other threads. • Coroutine 的執⾏行行可以更更有效地利利⽤用原本已經建立在 ThreadPool 裡⾯面的 Threads #JCConf Taiwan 2018
常⽤用的關鍵字 • suspend • delay • launch • runBlocking •
await • async #JCConf Taiwan 2018
suspend • ⼀一個 modifier • ⼀一個 suspend 的 function 只可以被
suspend function 或另⼀一 個 coroutine 呼叫 #JCConf Taiwan 2018
launch • 執⾏行行⼀一個 async 的 job #JCConf Taiwan 2018 launch
{ anSimpleFunction() }
runBlocking • 執⾏行行⼀一個 sync 的 job #JCConf Taiwan 2018 runBlocking
{ anSimpleFunction() }
async & await • aysnc {…} 會回傳⼀一個 Deferred<T> • 在回傳的
deferred 上⾯面加上 await 會獲得值 #JCConf Taiwan 2018 val value = async {calculate(1)}.await()
Live Demo https://gist.github.com/elvismetaphor/ 810712e3a08863c963c871f1bca0b3f2 #JCConf Taiwan 2018
Coroutines v.s. RxJava • Coroutines: 更更輕量量,更更容易易將原本循序式的程式改成非同 步、並⾏行行處理理的⽅方式 • RxJava: 提供更更豐富的
operators 做 stream 的轉換 • 根據你的使⽤用情境挑選適合的 library #JCConf Taiwan 2018
總結 • Coroutine 提供⼀一個類似 Thread 的功能,但是更更輕量量的操 作 • Coroutine 讓你可以容易易的將原本同步操作的邏輯轉換成非
同步操作的邏輯 #JCConf Taiwan 2018
參參考資料 • https://kotlinlang.org/docs/reference/coroutines- overview.html • Introduction to coroutines: https://youtu.be/_hfBv0a09Jc •
Exploring coroutines in Kotlin: https://youtu.be/ jT2gHPQ4Z1Q #JCConf Taiwan 2018
Thank you :) #JCConf Taiwan 2018