【问题标题】:Android onCreate Service called when Activity onDestroy calledActivity onDestroy 调用时调用 Android onCreate Service
【发布时间】:2014-05-17 16:52:33
【问题描述】:

我有一个启动服务的活动。如果我退出到主屏幕,然后从最近的应用程序列表中手动关闭活动,则会在服务中再次调用 onCreate。

所以当 Activity 被销毁时,会再次调用 onCreate(即使在 Activity 中调用 onDestroy 时服务正在运行)

我不想再次调用服务中的 onCreate。我知道这可能是重复的:Android service onCreate is called multiple times without calling onDestroy 但是这里建议的将服务放在另一个进程中的解决方案不起作用(至少在 Android 4.4 kit kat 上)

有什么建议吗?

【问题讨论】:

  • 您是否检查过 AOSP 错误报告,了解您所描述的一些类似问题;即code.google.com/p/android/issues/detail?id=63618?虽然您的服务会重新启动,但也许也有一些想法可以解决这个问题。
  • 最近应用列表按住home键,我手机上的实现没有关闭活动选项?

标签: android service android-activity oncreate ondestroy


【解决方案1】:

这是因为从“最近使用的应用程序”列表中终止应用程序时,您正在强制终止服务。有两种方法可以避免重新启动。不太好的方法是将服务置于与 Android Manifest 中的 Activity 不同的进程中。

例如:

<activity ...
     process:"com.example.activity.process" />
 <service ...
     process:"com.example.service.process" />

因此,在终止应用程序后,服务也不会被终止并重新启动。如果您采用这种方法,该服务将被 Android 终止。

更正确的方法是使用onStartCommand() 方法。

只需将以下代码添加到您的服务中:

@Override
public int onStartCommand(Intent intent, int flags, int startID) {
    return START_NOT_STICKY;
}

这将阻止服务在不正确终止时重新启动,即未调用onDestroy()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多