作者allenkuo (傻傻的妳 聰明如我)
看板AndroidDev
標題[問題] 關於handler & thread的理解
時間Wed Aug 15 13:58:19 2012
各位好
小弟在跟同事解釋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
1F:推 KiroKu:你tvthread昰甚麼? 說不定他本身就call了runonuithread 08/15 22:38
2F:→ KeySabre:tvthread看來只是個TextView... 08/16 00:18
3F:→ iincho:有source code應該不用猜,去追code吧.. 08/16 02:30
4F:→ iincho:剛剛試了一下還真的不會出錯,有點意思.. 08/16 02:40
5F:→ KeySabre:我在想那looper是不是拿到main thread的looper? 08/17 00:32
6F:→ iincho:你把thread id印出來看會發現很有趣的東西.... 08/17 10:58