首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Android2.3中重启崩溃的服务后,不会调用onStartCommand()

在Android2.3中重启崩溃的服务后,不会调用onStartCommand()
EN

Stack Overflow用户
提问于 2011-03-23 00:59:37
回答 2查看 7.3K关注 0票数 9

我在重启Android服务时遇到了问题。我是在API版本7上构建的,并在Android 2.3.3设备上运行。

问题是,当我的服务被系统终止并稍后重启时,只有我的服务的onCreate()被调用。不执行onStartCommand()中的代码。如果我第一次启动我的应用程序,onStartCommand()中的代码正常执行,一切正常,直到系统终止我的服务,服务才会正确重新启动。

Documentation says that onStartCommand() is always called when a service is restarted.在服务重启的情况下,应该以空意图调用onStartCommand()。这不是我的案子。

你知道为什么会发生这种事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-23 01:33:26

您可能会在姜饼中看到一个bug。在android开发人员组中有一个关于它的帖子:onStartCommand bug thread

有关详细信息,请参阅Dianne Hackborn的编号为26的帖子。

票数 11
EN

Stack Overflow用户

发布于 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() 是以空意图调用的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5394983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档