作者hellogg1 (小吉~掰:D)
看板AndroidDev
標題Re: [問題] 關於Service中handler持續傳送的問題
時間Fri Mar 22 17:17:33 2013
※ 引述《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