【问题标题】:No call to onStartCommand() follows the restart of a crashed service in Android 2.3在 Android 2.3 中重新启动崩溃的服务后,没有调用 onStartCommand()
【发布时间】:2011-03-22 16:59:37
【问题描述】:

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

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

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

知道为什么会发生这种情况吗?

【问题讨论】:

    标签: android service restart


    【解决方案1】:

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

    详情请参阅 Dianne Hackborn 的 26 号帖子。

    【讨论】:

    • 谢谢。所以我必须在 onCreate 和 onCommandStart 中复制初始化代码,因为它是一个小部件...
    • 难道这仍然是 4.2.2 中的错误?
    • 根据问题跟踪器 (code.google.com/p/android/issues/…) 应该在 4.2.2 中修复
    【解决方案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() 处理消息的时间,那么您可能不会得到 空意图调用。 (如果你需要这样做的话......一般来说 对于注册接收器之类的事情,你真的很想做 this 在 onCreate() 中,因为该方法只被调用一次。)

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

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

    我假设她所说的 API 级别是 10,我可以确认,当您从 API 级别 9 切换到 10 时,在服务重新启动后,onStartCommand() 被以 null 意图调用。

    【讨论】:

    • 我观察到这在 API 级别 10 (2.3.6) 中也可以重现。但是在 API 级别 14 中不可重现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-20
    • 1970-01-01
    相关资源
    最近更新 更多