在我正在处理的应用中,我有AlarmManager
以指定的时间和间隔开始Service
。 Service
使用我在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
,但如果你想看一眼,请告诉我。感谢。
答案 0 :(得分:2)
您应该使用IntentService
而不是常规旧服务。它在后台线程中完成所有工作,并在失去工作时自动停止。