執行緒與更新UI,消除偏見,細談原理
阿新 • • 發佈:2020-11-18
## 前言
相信不少讀者都閱讀過相類似的文章了,但是我還是想完整的把這之間的關係梳理清楚,細節聊好,希望你也能從中學到一些。
進入正題,大家應該都聽過這樣一句話——**“UI更新要在主執行緒,子執行緒更新UI會崩潰”**。久而久之就感覺這是個真理,甚至被認為是“官方結論”。
但是如果問你,官方什麼時候在哪裡說過這句話,你會不會有點懵。而且就算是官方說的,也就不一定對的是吧,眾所周知,`Google`官方文件一直都有點說的不清不楚,需要我們進行大量實踐得出實際的結論。
就好比之前的`Android11`更新文件,我也是看了好久,通過一個個實踐才寫出了適配指南,然後就發現其中一個比較明顯的`BUG`,`Google`官方有說過這樣一句:
>下面是首先需要關注的行為變更 (無論您應用的 targetSdkVersion 是多少):
>外部儲存訪問許可權 - 應用無法再訪問外部儲存空間中其他應用的檔案。
其實經過實踐會發現,外部儲存訪問許可權還是會和`targetSdkVersion`有關,具體可以看這篇[Android11適配指南](https://juejin.im/post/6860370635664261128)。
廢話有點多了,今天還是通過實踐案例,看看這個關於執行緒和UI更新的 **“官方結論”** 正確嗎?
## 案例一,子執行緒更新button文字
1)`onCreate`方法中更新了按鈕顯示文字,修改`Button`的寬度為固定或者`wrap_content`,都不崩潰。
```kotlin