在Android 2.3中重新启动崩溃的服务后,不会调用onStartCommand()

时间:2011-03-22 16:59:37

标签: android service restart

Android服务重启时遇到问题。我正在构建针对API版本7并在使用Android 2.3.3的设备上运行。

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

Documentation says that onStartCommand() is always called when a service is restarted.在服务重启的情况下,应使用null intent调用onStartCommand()。这不是我的情况。

知道为什么会这样吗?

2 个答案:

答案 0 :(得分:11)

您可能会看到Gingerbread中的错误。 android-developers组中有一个关于它的线程:onStartCommand bug thread

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

答案 1 :(得分:2)

这是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 commit链接不起作用。 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()没有调用null。该   onCreate()方法仍然被调用。作为一种解决方法,你可以   可能只是在onCreate()中发布一条消息并在其中设置一个标志   onStartCommand();如果你没有收到onStartCommand()的话   消息处理的时间,然后你可能不会得到   null Intent调用。 (如果你需要这样做...通常   对于注册接收器之类的东西,你真的很想做   这在onCreate()中,因为该方法只被调用一次。)

also wrote此行为将在下一次平台更新(3.0之后)中修复:

  

我将在下一个平台更新(Android 3.0后)中修复此问题;   不幸的是,这段代码已经在源代码树中出现了一段时间,   并且现在在几个版本中,所以我们需要忍受破碎   这些版本上的行为。该服务仍将具有onCreate()   因此你可以在那里工作。

我认为她所说的API级别为10,我可以确认,当您从API级别9切换到10时,在服务重新启动后,使用null意图调用onStartCommand() < / p>