看板 AndroidDev 關於我們 聯絡資訊
※ 引述《windverb (Vcman)》之銘言: : 最近在做測試的時候,在Service中使用Handler的postdelay()每30秒執行一次會造成 : 整個程式當機的問題,是不是因為Handler是用於更新UI用的多執行緒,但我現在的Service : 主要目的只是做藍芽傳輸根本不需要做UI,那如果我改用threXad是不是能解決每30秒固 : 定從Service中傳送資料? ?能不能請各位神人提供意見,謝謝。 首先,handler不是用來更新UI, handler是用來讓主執行緒(Main thread)與其它thread溝通用, Android的特性是由main thread處理所有UI的變化, 因此,當你有其它thread要更新畫面時,就得透過handler去要求main thread去更新畫面, 在你的case中,雖然Service沒有UI畫面,但它還是負責整個APP的運作, 你不能讓main thread去sleep或讓main thread進入無窮loop去做事, main thread只要超過5秒沒有回應,Android就會出現無回應的錯誤訊息了。 你可以用new thread去計算30秒,再透過handler去要求main thread去做某件事。 以上是小弟的淺見,有錯請糾正,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 211.72.117.101
KeySabre:你的handler之所以可以更新UI,是因為它拿的looper==main 03/22 20:46
KeySabre: pooper,也因此message都在main thread處理。可用Handle 03/22 20:46
KeySabre:rThread讓handler拿非UI的looper,android default launc 03/22 20:46
KeySabre:her裡面有很好的範例。 03/22 20:46
KeySabre:或者用TimerTask其實也不錯,可根據需求做選擇 03/22 20:47