簡體   English   中英

Android中協程如何命名?

[英]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().namecoroutineContext[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM