view.post()和GlobalScope.launch(Dispatchers.Main)之间有什么区别?

时间:2019-09-10 02:33:24

标签: android multithreading

实际上,我遇到了根据行数动态调整textview重力的问题。

我读了this article,但我只是不太了解线程技术的区别,就像textview.post()runOnUiThread{}GlobalScope.launch(Dispatchers.Main)Thead{}.start()

TLDR,简短的问题是“ 为什么下面的代码应在post范围内运行?

private fun setText(text : String) {
    textView.text = text

    textView.post {
        if (textView.lineCount > 1) {
            textView.gravity = Gravity.START
        }else {
            textView.gravity = Gravity.CENTER
        }
    }
}

另一个简短的问题是“ 为什么它在GlobalScope.launch(Dispatchers.Main)中不起作用?

这是我的尝试:

private fun setText(text : String) {
    textView.text = text

    GlobalScope.launch(Dispatchers.Main) {
        if (textView.lineCount > 1) {
            textView.gravity = Gravity.START
        }else {
            textView.gravity = Gravity.CENTER
        }
    }
}

我试图将其放入GlobalScope.launch(Dispatchers.Main)中,但它有时可行,有时却不可行。 另外,我尝试在没有textView.post()的情况下制作它,但是它不起作用。 getLineCount()的源代码似乎不是异步操作?

欢迎任何建议,谢谢一切。

0 个答案:

没有答案