在我工作的应用程序中,我有一个AlarmManager
,它在指定的时间和间隔开始Service
。 Service
使用我在Intent
中发送的一些数据读取/写入SQLite数据库,制作Notification
并发送短信。我遇到了一个问题,当设备进入“深度睡眠”并再次使用该设备时,我得到一个NullPointerException
,的Service
。正如我已经做了一些研究,我有大约Service
是如何工作的,我一直没能回答以下几个问题:更好的理解服务
1)我意识到,我用的是过时onStart
方法为Service
。我打算用START_REDELIVER_INTENT
标志切换到onStartCommand
标志(认为这是我得到的空例外,因为Service
试图用旧的onStart
重新启动,而没有获得原始的Intent
)。我的问题是这样的:我应该把工作Service
做在onStartCommand
或onCreate
吗?有没有功能差异?
2)考虑到我在做我的Service
,这是不是足够的工作来投入自己的Thread
?
3)我需要具体拨打stopSelf
吗?如果是这样,哪里是最好的地方叫它?
4)这一个较为模糊:据我所知,我已经取消了所有注册的报警和深睡后,我仍然有一个Service
空例外。即使我从未触发警报,是否有任何原因Service
仍然可以运行?
如有必要,请咨询任何澄清问题。我没有发布代码,因为它大部分是通用的,用于启动和使用Service
,但如果您想查看,请告诉我。谢谢。
您应该使用IntentService而不是常规的旧服务。它在后台线程中完成所有工作,并在工作不成功时自动停止。 – smith324 2012-02-27 04:24:55
查看IntentService,看起来它是完美的。如果你想让这个答案,我会接受它。 – koopaking3 2012-02-27 14:40:04
已添加为答案。 – smith324 2012-02-27 19:16:01