Kotlin 的協(xié)程用力瞥一眼 - 學(xué)不會協(xié)程?很可能因為你看過的教程都是錯的
https://kaixue.io/kotlin-coroutines-1/
練習(xí)題
1. 開啟一個協(xié)程槽片,并在協(xié)程中打印出當(dāng)前線程名截酷。
我的代碼
打印結(jié)果:
結(jié)果
2. 通過協(xié)程下載一張網(wǎng)絡(luò)圖片并顯示出來实牡。
主要代碼:(xml 中只放了一個控件 ImageView)
class MainActivity : AppCompatActivity() {
var imgMain: ImageView? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_new)
imgMain = findViewById(R.id.img_main)
CoroutineScope(Dispatchers.Main).launch {
val bitmap = withContext(Dispatchers.IO) {
Log.d("MainActivity", "bitmap 當(dāng)前線程為:" + Thread.currentThread().toString())
getImage("https://cdn.pixabay.com/photo/2020/04/10/23/17/waterfall-5028130_960_720.jpg")
}
imgMain!!.setImageBitmap(bitmap)
Log.d("MainActivity", "當(dāng)前線程為:" + Thread.currentThread().toString())
}
}
fun getImage(imgUrl: String): Bitmap {
var bmp: Bitmap? = null
try {
val myUrl = URL(imgUrl)
val conn = myUrl.openConnection() as HttpsURLConnection
conn.requestMethod = "GET"
conn.connectTimeout = 6000
val code = conn.responseCode
var inputStream: InputStream? = null
if (code == 200) {
inputStream = conn.inputStream
bmp = BitmapFactory.decodeStream(inputStream)
}
inputStream!!.close()
} catch (e: Exception) {
e.printStackTrace()
}
return bmp!!
}
}
記得在 AndroidManifest.xml 中加上權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>
打印結(jié)果:
打印結(jié)果
運行效果:
運行效果