作者laiair (overture1928)
看板AndroidDev
標題[問題] Thread+Handler 回傳字串
時間Sat Dec 29 04:01:44 2012
各位大大好
小弟有個問題想請教大家
今天在研究 4.0 之後的網路問題
得知需要開一個 Thread 來解決不能在主線程
跑一些比較耗時的動作
=
小弟參考了網路的文章
寫了一個 button 的 click 動作
然後呼叫自定義的 funtion plzHelpMe()
回傳一個 String 給我
收到這個 String 再用 Toast 顯示在畫面上
=
https://gist.github.com/4401250
連結的是程式碼
=
因為我有故意關掉網路測試
我疑惑的是
我按下 button 這個動作
第一次回傳 "HI null" (不理想結果)
第二次才回傳 "HI 網路連線有問題" (理想結果)
為什麼第一次會回傳空值
而沒有等 handler 處理完呢
麻煩大大指教了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.244.55.146
1F:→ cooper6334:因為Thread會平行處理,結果會先return再送message 12/29 04:51
2F:→ cooper6334:不過最好是去搞懂UIThread的概念還有Handler的部份 12/29 04:52
3F:→ laiair:謝謝 cooper 大解惑 不過我還有個問題想指教 12/29 13:08
4F:→ laiair:因為在 handler 不能直接return 我想要的字串 12/29 13:08
5F:→ laiair:我才會設定一個 String 去接 最後再return給我 12/29 13:09
6F:→ laiair:是不是有方法可以等 handler處理完 return理想結果呢 12/29 13:10
7F:→ popcorny:建議改用AsyncTask比較簡單..比Handler更適合你的需求 12/29 16:17
8F:→ popcorny:還有你的Thread也寫不對..request要寫在Thread中才是 12/29 16:18
9F:→ popcorny:還有你說的等完才回傳..那就失去開thread的目的了 12/29 16:18
10F:→ laiair:謝謝 pop 大的建議! 我會去找 AsyncTask的文章來研究 12/29 17:16
11F:→ laiair:剛剛誤打誤撞 在 thread.start(); 後面補上 thread.join(); 12/29 17:17
12F:→ laiair:return 第一次就傳回我要的值了@@ 可是還是有點迷惑 12/29 17:18
13F:→ laiair:這樣就不需要 handler 來幫我檢查 thread結束了沒 12/29 17:20
14F:→ laiair:還是謝謝兩位大大的熱心@@ 小弟會繼續研習的 感恩 12/29 17:22
15F:推 master11360:推AsyncTask,好用 12/30 12:35
16F:→ tomap41017:請用AsyncTask;或是更簡單一點用Loader API 01/05 15:43
17F:→ tomap41017:個人認為Loader切得更漂亮:) 01/05 15:44