看板 AndroidDev 關於我們 聯絡資訊
最近在學習android, 了解android的UI更新只能在main thread上進行, 在這個認知之下,我嘗試寫了一段code如下: https://gist.github.com/anonymous/3c03aa168b2188d5beaa 發現有些地方跟認知有差異,想請教一下各位先進: 1.點擊button觸發 clickButtonX() method後,該方法裡面new了一個新thread 並試圖修改按鈕的文字,結果不易外,出現ANR 2.我在onCreate()中 也new了一個新thread,一樣是試圖修改按鈕文字, 結果居然可以修改!? 以上兩點比較,我也在兩個method中各印出log,顯示當前的thread RunnableThreadId(1) = 1 RunnableThreadName(1) = main RunnableThreadId(2) = 16070 RunnableThreadName(2) = Thread-16070 RunnableThreadId(3) = 16072 RunnableThreadId(3) = Thread-16072 想請教大家,為什麼在onCreate另起的thread裡面可以更新UI呢? 懇請各位不吝指教,謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 202.173.43.196 ※ 文章網址: https://www.ptt.cc/bbs/AndroidDev/M.1442904188.A.E21.html
tracetw: 應為他是main thread 啊 09/22 14:47
clairehuei: 但是onCreate裡面修改UI的動作是在new thread裡面 09/22 14:50
clairehuei: thread id 也不是 main thread id 09/22 14:51
ssccg: 啟動後短時間內還可以從別的thread更新UI,也許是view到某 09/22 15:06
ssccg: 個狀態後才不能從其他thread更新吧,用Thread.sleep試試看 09/22 15:07
ssccg: 另外那不叫ANR,ANR是app沒有回應(main thread卡太久) 09/22 15:08
clairehuei: 剛在onCreate的new thread中加入sleep後 09/22 15:17
clairehuei: 的確就不能更新了! 09/22 15:18
clairehuei: 感謝兩位指教~ 09/22 15:46
givemepass: 這個我倒是沒發現過耶XD 也許是ssccg大說的那樣 09/22 21:27
givemepass: 不過焦點放錯了 應該放在後面控制非ui都要丟到backgro 09/22 21:28