作者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
1F:推 KeySabre:你的handler之所以可以更新UI,是因为它拿的looper==main 03/22 20:46
2F:→ KeySabre: pooper,也因此message都在main thread处理。可用Handle 03/22 20:46
3F:→ KeySabre:rThread让handler拿非UI的looper,android default launc 03/22 20:46
4F:→ KeySabre:her里面有很好的范例。 03/22 20:46
5F:→ KeySabre:或者用TimerTask其实也不错,可根据需求做选择 03/22 20:47