Re: [問題] 關於Service中handler持續傳送的問題

看板AndroidDev作者 (小吉~掰:D)時間11年前 (2013/03/22 17:17), 編輯推噓1(104)
留言5則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《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

03/22 20:46, , 1F
你的handler之所以可以更新UI,是因為它拿的looper==main
03/22 20:46, 1F

03/22 20:46, , 2F
pooper,也因此message都在main thread處理。可用Handle
03/22 20:46, 2F

03/22 20:46, , 3F
rThread讓handler拿非UI的looper,android default launc
03/22 20:46, 3F

03/22 20:46, , 4F
her裡面有很好的範例。
03/22 20:46, 4F

03/22 20:47, , 5F
或者用TimerTask其實也不錯,可根據需求做選擇
03/22 20:47, 5F
文章代碼(AID): #1HJ26lLF (AndroidDev)
文章代碼(AID): #1HJ26lLF (AndroidDev)