我在重启Android服务时遇到了问题。我是在API版本7上构建的,并在Android 2.3.3设备上运行。
问题是,当我的服务被系统终止并稍后重启时,只有我的服务的onCreate()被调用。不执行onStartCommand()中的代码。如果我第一次启动我的应用程序,onStartCommand()中的代码正常执行,一切正常,直到系统终止我的服务,服务才会正确重新启动。
Documentation says that onStartCommand() is always called when a service is restarted.在服务重启的情况下,应该以空意图调用onStartCommand()。这不是我的案子。
你知道为什么会发生这种事吗?
发布于 2011-03-23 01:33:26
您可能会在姜饼中看到一个bug。在android开发人员组中有一个关于它的帖子:onStartCommand bug thread
有关详细信息,请参阅Dianne Hackborn的编号为26的帖子。
发布于 2013-09-05 05:35:14
这是Android 2.3 (API级别9)中的一个错误,在API级别10中已修复。
来自Dianne Hackborns post regarding this issue
好的,这确实在3.3中被打破了。原文如此!这一变化是从去年8月开始的。这就是打破它的变化:
https://android.googlesource.com/platform/frameworks/base/+/5474b0f8603ee66413c3e44600ca46f162f3089e
请注意,git提交链接之前不起作用。Click here for a working mirror link to the commit and line that is causing the bug.
她的意思也是2.3,但她写的是3.3。She later corrected it and provided a suggestion for a workaround:
对不起,是的,我的意思是2.3。
自从GB代码发布以来,这已经在代码库中出现了,所以谁知道它附带的是什么设备。
问题不在于服务没有被重启,而在于它们的onStartCommand()在那个时候没有被调用。onCreate()方法仍然被调用。作为一种变通办法,您可能只需要在onCreate()中发布一条消息并在onStartCommand()中设置一个标志;如果在处理消息时还没有收到onStartCommand(),那么您可能不会得到null意图调用。(如果您需要这样做的话...通常,对于注册接收器这样的事情,您确实希望在onCreate()中完成这项工作,因为该方法只调用一次。)
她also wrote说,这种行为将在下一次平台更新(3.0以后)中修复:
我将在下一次平台更新(后Android3.0)中修复这个问题;不幸的是,这段代码已经在源码树中出现了一段时间,现在已经发布了几个版本,所以我们需要忍受这些版本上的错误行为。该服务仍将调用其onCreate(),因此您可以在那里执行工作。
我假设她所指的API级别是10,当您从API级别9切换到10时,我可以确认在服务重新启动后, onStartCommand() 是以空意图调用的。
https://stackoverflow.com/questions/5394983
复制相似问题