Android 執行緒
為什麼要有執行緒(Thread)
為什麼要有執行緒呢,先看一下底下的代碼。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
for (i in 1..100){
println("Thomas : "+i)
Thread.sleep(1000)
}
}
}
執行此app時,Log 視窗每秒吐出一個訊息。但手機的畫面會整個卡住,過了100秒之後,才會出現畫面。所以這種寫法絕對是不良的,但偏偏初學者就是一定會這麼寫。
上面會出現畫面卡住的原因,是因為在列印1, 2, 3…時,都是 UI主執行緒在工作,等100個值都印出後,UI主執行緒才會繼續更新畫面。這種寫法在某些手機上會出現ANR錯誤(Android Non Response)。
說的更明白一點,就是不能讓UI主執行緒執行過於耗時的工作。
Thread及Runnable
要解決上述的問題,需要先產生一個Runnable物件,並將要執行的工作寫在run()方法之中。
接下來再產生一個新的執行緒(雇用一個員工),將上述的工作(Runnable)丟給它,再使用start()方法命令這位員工開始工作。不過要注意一點,並不是下達start()後員工就會馬上工作,至少需等個幾奈秒到幾微秒的時間才會開始運作。
