作者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