[英]How to name coroutine in Android?
根據文檔,我們可以使用CoroutineName("theName")
命名協程
如果我在沒有名稱的情況下運行它(在單元測試中)
runBlocking {
launch {
println("main runBlocking pre : ${Thread.currentThread().name}:${coroutineContext[Job]}")
delay(500)
println("main runBlocking post : ${Thread.currentThread().name}:${coroutineContext[Job]}")
}
Thread.currentThread().name
和coroutineContext[Job]
都會為協程名稱分配一個 ID,因此打印如下(注意coroutine#2
)
main runBlocking pre : main @coroutine#2:"coroutine#2":StandaloneCoroutine{Active}@39529185
main runBlocking post : main @coroutine#2:"coroutine#2":StandaloneCoroutine{Active}@39529185
如果我用名稱運行它(在單元測試中)
runBlocking {
launch(CoroutineName("CustomName")) {
println("main runBlocking pre : ${Thread.currentThread().name}:${coroutineContext[Job]}")
delay(500)
println("main runBlocking post : ${Thread.currentThread().name}:${coroutineContext[Job]}")
}
它將打印(注意@CustomName#2
)
main runBlocking pre : main @CustomName#2:"CustomName#2":StandaloneCoroutine{Active}@78e117e3
main runBlocking post : main @CustomName#2:"CustomName#2":StandaloneCoroutine{Active}@78e117e3
但是,如果我在 Android 中運行它,如下所示
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
runBlocking {
launch(CoroutineName("CustomName")) { // context of the parent, main runBlocking coroutine
Log.d("Track", "main runBlocking pre : ${Thread.currentThread().name}:${coroutineContext[Job]}")
delay(500)
Log.d("Track", "main runBlocking post : ${Thread.currentThread().name}:${coroutineContext[Job]}")
}
}
}
它打印
Track: main runBlocking pre : main:StandaloneCoroutine{Active}@5e322c2
Track: main runBlocking post : main:StandaloneCoroutine{Active}@5e322c2
協程名稱未給出,協程分配的 ID 也未給出。 我只能從地址 ID 來識別,即@5e322c2
,不能保證始終相同。
如何在 Android 中分配協程名稱?
協程名稱僅在調試模式下使用。 但是,您可以在您的應用程序中啟用:
System.setProperty("kotlinx.coroutines.debug", "on" )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.