作者yauhh (哟)
看板AndroidDev
标题[问题] IntentService怎麽用?
时间Thu Apr 26 22:40:44 2012
我想做比较稳定的即时service,
基本上不需要service长期运作,只要想要的时候可以叫得醒service就好,
然後,一旦派送工作到service,最好service可以运作到工作完成.
就算app关掉了,已经送上service的工作也要继续完成.
听说IntentService可以管理一些thread,我颇心动,就将旧程式模型修改
为IntentService.
旧程式是启动app时会启动service,然後可以即时bindService把工作派上去.
bindService时有开partial wake lock和wifi lock,然後service会启动AsyncTask,
AsynTask中也开wake lock和wifi lock (使用service context).
如果有一百个工作,就会发送一百个AsyncTask;这些AsyncTask共抢一个lock.
运作起来,如果app还开着时都会运作,而如果app关掉,就看情况,通常是大批工作
的後面一大段AsyncTask-s都不见. 我猜是因为当时service已经结束.
修改为IntentService的方式,我查了手册及例子,觉得好像是把
... extends Service {
改成
... extends IntentService {
这样是基本. 接着看到的例子说,要启动就是丢资料到intent然後用startService
方式派上去,但我看这样应该是只有IntentService启动时会onHandleIntent吧?
另外,应该也是照样使用bindService. 整体来说,我旧程式改成新程式就是
把Service改成IntentService而已.
後来测试新程式的运作情况,觉得好像与旧程式很接近. 也对,其实就是没改过.
那请问IntentService怎麽用可以做到本文第一段所说的需求呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.112.229.204
※ 编辑: yauhh 来自: 59.112.229.204 (04/26 22:49)
1F:推 LaPass:onHandleIntent(){ 这里面放个lock把她卡住 } 04/26 23:20
2F:→ yauhh:如果前一个handling工作比较久,会让後来的intent逾时吗? 04/26 23:24
3F:→ yauhh:另外问题,送intent都用startService送吗? 谢谢 04/26 23:25
4F:推 LaPass:建议用onbind,这样就可以做复杂一点的事 04/26 23:27
5F:→ LaPass:如果架构不好改的话,你找看看,是onstart还是什麽on什麽的 04/26 23:29
6F:→ yauhh:onStartCommand? 04/26 23:32
7F:推 LaPass:你把滑鼠移到onStartCommand,再看一下eclipse显示什麽,应 04/26 23:55
8F:→ LaPass:该会比我问来的准,因为我也是看那个东西 04/26 23:55
9F:→ LaPass: 问我 04/26 23:55