簡體   English   中英

協程作業一鍵操作

[英]Coroutine Job operation at the push of a button

變量聲明

private lateinit var wayoJob: Job
override val coroutineContext: CoroutineContext
    get() = Dispatchers.Main + wayoJob

Function

@InternalCoroutinesApi
private fun startRepeatingJob(timeInterval: Long): Job {
    return CoroutineScope(Dispatchers.Default).launch {
        while (NonCancellable.isActive) {

            Log.i("API", "UPDATE")

            delay(timeInterval)
        }
    }
}

在開始按鈕中

wayoJob = startRepeatingJob(5000L)

在 Button end 和 onDestroy()

wayoJob.cancel()

當我單擊結束按鈕時,它返回一個錯誤:

引起:kotlin.UninitializedPropertyAccessException:lateinit 屬性 wayoJob 尚未初始化

有沒有辦法解決?

我必須做一個 function,當我按下一個按鈕時每隔幾秒鍾開始執行一次,當我單擊另一個按鈕時會結束。

編輯:

我可以用自己的shouldBeActive值嘗試這樣的事情,並在需要時運行,但這不是應該的

var shouldBeActive = false

@InternalCoroutinesApi
private fun startRepeatingJob(timeInterval: Long): Job {
    return CoroutineScope(Dispatchers.Default).launch {
        while (NonCancellable.isActive && shouldBeActive) {

            Log.i("API", "UPDATE")

            delay(timeInterval)
        }
    }
}

我找到了解決方案。

我有一個活動重新加載和 object 重置

解決方案是像下面這樣插入它。 此解決方案確保在此期間不會創建第二個 object

companion object {
    private lateinit var wayoJob: Job
}

樣品整個 class:

class StartActivity : AppCompatActivity(), CoroutineScope {
    companion object {
        private lateinit var wayoJob: Job
    }

    override val coroutineContext: CoroutineContext
        get() = Dispatchers.Main + wayoJob

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_start)
    }

    @InternalCoroutinesApi
    private fun startRepeatingJob(timeInterval: Long): Job {
        return CoroutineScope(Dispatchers.Default).launch {
            while (NonCancellable.isActive) {

                Log.i("API", "UPDATE")

                delay(timeInterval)
            }
        }
    }

    @InternalCoroutinesApi
    fun endBtnOnClick(view: View?) {
        wayoJob.cancel()
    }

    @InternalCoroutinesApi
    fun startBtnOnClick(view: View?) {
        wayoJob = startRepeatingJob(5000L)
    }

    override fun onDestroy() {
        super.onDestroy()
        wayoJob.cancel()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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