看板 AndroidDev 關於我們 聯絡資訊
各位好 小弟在跟同事解釋Handler 和 thread時, 可能因為自己觀念不是很扎實, 所以解釋到後來, 反而產生了一些困惑, 但是後來坐下來仔細思考,似乎有了答案 還請各位幫我確認我的思考是否正確 我解釋的程式碼如下 thread = new HandlerThread("demo"); thread.start(); thread_h = new Handler(thread.getLooper()); thread_h.post(changeText); private Runnable changeText = new Runnable() { public void run() { tvThread.setText("I'm Thread"); } }; 當下看到投影片的時候,我覺得tvThread.setText("I'm Thread"); 這邊應該錯了 要用runOnUiThread(tvThread.setText("I'm Thread")); 才對 但是程式run了以後卻沒報錯, 仔細思考過後我的理解如下: 讓handler建立的thread為main thread之外的thread, 此時若Main thread已執行完畢,runnaable中對ui的控制可以不必用runOnUiThread (因為demo就是main thread,如此例), 但若main thread尚未執行完畢,則一定要用runOnUiThread (因為demo此時非main thread) 故,保險起見,都用runOnUiThread 就可以避免還要考慮main thread到底執行完了沒的問題 以上,若有錯請指正 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 27.241.203.198
KiroKu:你tvthread昰甚麼? 說不定他本身就call了runonuithread 08/15 22:38
KeySabre:tvthread看來只是個TextView... 08/16 00:18
iincho:有source code應該不用猜,去追code吧.. 08/16 02:30
iincho:剛剛試了一下還真的不會出錯,有點意思.. 08/16 02:40
KeySabre:我在想那looper是不是拿到main thread的looper? 08/17 00:32
iincho:你把thread id印出來看會發現很有趣的東西.... 08/17 10:58