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()
。这不是我的情况。
知道为什么会这样吗?
答案 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>