2012-02-27 54 views
1

在我工作的应用程序中,我有一个AlarmManager,它在指定的时间和间隔开始ServiceService使用我在Intent中发送的一些数据读取/写入SQLite数据库,制作Notification并发送短信。我遇到了一个问题,当设备进入“深度睡眠”并再次使用该设备时,我得到一个NullPointerException,的Service。正如我已经做了一些研究,我有大约Service是如何工作的,我一直没能回答以下几个问题:更好的理解服务

1)我意识到,我用的是过时onStart方法为Service 。我打算用START_REDELIVER_INTENT标志切换到onStartCommand标志(认为这是我得到的空例外,因为Service试图用旧的onStart重新启动,而没有获得原始的Intent)。我的问题是这样的:我应该把工作Service做在onStartCommandonCreate吗?有没有功能差异?

2)考虑到我在做我的Service,这是不是足够的工作来投入自己的Thread

3)我需要具体拨打stopSelf吗?如果是这样,哪里是最好的地方叫它?

4)这一个较为模糊:据我所知,我已经取消了所有注册的报警和深睡后,我仍然有一个Service空例外。即使我从未触发警报,是否有任何原因Service仍然可以运行?

如有必要,请咨询任何澄清问题。我没有发布代码,因为它大部分是通用的,用于启动和使用Service,但如果您想查看,请告诉我。谢谢。

+1

您应该使用IntentService而不是常规的旧服务。它在后台线程中完成所有工作,并在工作不成功时自动停止。 – smith324 2012-02-27 04:24:55

+0

查看IntentService,看起来它是完美的。如果你想让这个答案,我会接受它。 – koopaking3 2012-02-27 14:40:04

+0

已添加为答案。 – smith324 2012-02-27 19:16:01

回答

2

您应该使用IntentService而不是普通旧服务。它在后台线程中完成所有工作,并在工作不全时自动停止。