Android onCreate Service 在 Activity onDestroy 调用时调用

标签 android service android-activity oncreate ondestroy

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

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

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

有什么建议吗?

最佳答案

这是因为从“最近使用的应用程序”列表中终止应用程序后,您将强制终止该服务。有两种方法可以避免重新启动。不太好的方法是将服务放在与 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()

关于Android onCreate Service 在 Activity onDestroy 调用时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713882/

相关文章:

java - 当设备处于 sleep 模式时,如何在 Android 中的某个特定时间推送本地通知

Android:android.content.res.Resources$NotFoundException:字符串资源 ID #0x5

java - 有没有办法在每次启动任何 Activity 时接收广播?

linux - 如何为nginx服务编写upstart脚本?

android - 如何在按下后退按钮时重新启动 Activity ?

Android:在 Activity 恢复中更新 SharedPrefereces 不起作用

android - 在recyclerview android中添加两个部分

php - Flex - 增加 PHP 服务函数调用的超时

c# - Windows 服务在启动期间失败的正确方法是什么

Android:如何制作*真正*透明的 Activity SwipePad 风格?