更好地理解服务

时间:2012-02-27 03:11:33

标签: android android-service alarmmanager

在我正在处理的应用中,我有AlarmManager以指定的时间和间隔开始ServiceService使用我在Intent中发送的一些数据来读取/写入SQLite数据库,生成Notification并发送短信。我遇到了一个问题,当设备进入“深度睡眠”并且我再次使用该设备时,我会在NullPointerException的{​​{1}}上使用Intent强制关闭。在我做了一些研究之后,我对Service的工作原理提出了几个问题,我无法回答:

1)我意识到我在Service使用了已弃用的onStart方法。我将使用Service标志切换到onStartCommand(认为这是我得到的空例外,因为START_REDELIVER_INTENT尝试使用旧Service重新启动而未获得原onStart)。我的问题是:我应该将Intent的工作放在Service还是onStartCommand?有什么功能差异吗?

2)考虑到我在onCreate中所做的工作,是否有足够的工作来放入自己的Service

3)我是否需要专门致电Thread?如果是这样,哪个地方最好叫它?

4)这个更模糊:据我所知,我已经取消了所有注册的警报,深度睡眠后,我仍然得到stopSelf的空例外。是否有任何理由Service仍然可以运行,即使我从未触发警报?

如有必要,请提出任何澄清问题。我没有发布代码,因为大多数代码都是通用的,用于启动和使用Service,但如果你想看一眼,请告诉我。感谢。

1 个答案:

答案 0 :(得分:2)

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