目錄
1.協(xié)程是什么?
2.為什么需要協(xié)程?解決了什么問題?
3.概括一下協(xié)程的幾個(gè)常用概念?
4.協(xié)程的幾個(gè)最常用的方法是什么?
5.實(shí)戰(zhàn)使用場(chǎng)景示例
1.協(xié)程是什么?
背一句話:協(xié)程是一個(gè)輕量級(jí)的線程框架,能夠用同步的代碼寫出異步的邏輯,并且不會(huì)阻塞線程
2.為什么需要協(xié)程?
例如以前的網(wǎng)絡(luò)請(qǐng)求與更新UI數(shù)據(jù)的代碼,會(huì)出現(xiàn)大量的回調(diào)地獄

而使用協(xié)程之后:可以在IO線程中執(zhí)行網(wǎng)絡(luò)請(qǐng)求,能自動(dòng)切換主線程 然后更新UI

3.概括一下協(xié)程的幾個(gè)概念
作用域 GlobalScope lifecycleScope viewModelScope 然后.launch{ }
調(diào)度器 Dispatchers IO Main Default
suspend 掛起函數(shù)
4.使用方法
① 在Activity 和Fragment中:lifecycleScope.launch{} 開啟協(xié)程 作用域
② 使用withContext(Dispatchers.IO){} 來切換到IO線程中,處理耗時(shí)操作
③ 使用withContext(Dispatchers.Default){} 切換到default線程做復(fù)雜計(jì)算
④ suspend 掛起函數(shù)標(biāo)記, 用suspend 標(biāo)記網(wǎng)絡(luò)請(qǐng)求、數(shù)據(jù)庫請(qǐng)求 等函數(shù)
⑤ 為了什么?提醒開發(fā)者 這個(gè)函數(shù)是耗時(shí)操作 可以被協(xié)程掛起,暫停
⑥ delay(2000)等待2秒, delay不會(huì)像sleep那樣阻塞線程, 可以等兩秒后執(zhí)行后續(xù)的
ps:慎用GlobalScope,因?yàn)樗鼪]綁定生命周期,容易造成內(nèi)存泄漏
ps:runBlocking一般在測(cè)試中用,Android開發(fā)中很少使用,會(huì)阻塞線程
5.實(shí)戰(zhàn)的場(chǎng)景




