[問題] 關於handler & thread的理解

看板AndroidDev作者 (傻傻的妳 聰明如我)時間13年前 (2012/08/15 13:58), 編輯推噓1(105)
留言6則, 3人參與, 最新討論串1/1
各位好 小弟在跟同事解釋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

08/15 22:38, , 1F
你tvthread昰甚麼? 說不定他本身就call了runonuithread
08/15 22:38, 1F

08/16 00:18, , 2F
tvthread看來只是個TextView...
08/16 00:18, 2F

08/16 02:30, , 3F
有source code應該不用猜,去追code吧..
08/16 02:30, 3F

08/16 02:40, , 4F
剛剛試了一下還真的不會出錯,有點意思..
08/16 02:40, 4F

08/17 00:32, , 5F
我在想那looper是不是拿到main thread的looper?
08/17 00:32, 5F

08/17 10:58, , 6F
你把thread id印出來看會發現很有趣的東西....
08/17 10:58, 6F
文章代碼(AID): #1GApf-4X (AndroidDev)