START_STICKY 不起作用

问题描述 投票:0回答:3

我问了一个关于保持服务活跃的问题,但我没有找到解决方案,所以我有另一个更简单的问题。

android 文档说,如果 android 在低内存状态下 onStartCommand 返回时终止带有 START_STICKY 的服务,如果我是正确的,它将重新创建该服务。

但是该服务在一段时间后被杀死并在运行任务中消失,但它没有被重新创建!我在手机上的 android 4.4.2 中运行此服务,当屏幕打开时,它存活了大约 20 分钟 但是当屏幕关闭时,它会在大约 3 或 4 分钟后消失......在我的平板电脑上(同样是 android 4.4.2),它停留的时间更长,大约 4 或 5 小时,然后再次消失(我在不同的测试中得到了不同的结果)。我什至在 android 5 上进行了测试,结果与使用 android 4.4.2 的平板电脑类似

我在这里遗漏了什么吗?我认为当我们使用 return START_STICKY 时,服务不会被破坏,直到我调用 stopService

这是我的服务:

public class MyService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    public void onDestroy() {
        super.onDestroy();
    }
}

抱歉英语不好:)

android service
3个回答
7
投票

可能对某人有用--

此问题与基于 AOSP 的 ROM 的设备无关。因此 android 4.4.2 版本不是问题。

因此,有一些设备(华为、LAVA、小米)预装了启动管理器或节能器,并且它们在定制的 Android ROM 上运行。所以这些设备通常不提供粘性服务。

因此,可能的选择是实现看门狗计时器之类的东西并检查其间的服务,如果未启动,则可以再次运行该服务。不过,可能的影响可能是电池消耗。


3
投票

服务重新创建,不会重新启动。 如果您覆盖

onCreate
并执行 Log.d 或 Toast,您将看到 onCreate 在您的 Activity 和应用程序被销毁后被调用。

因此,在重新创建后保持其运行的技巧是在

onCreate
方法上执行代码,并使用
onStartCommand
return START_STICKY


0
投票

在 Android Studio Hedgehog 2023.1.1 Patch 2 上,如果您使用调试器启动应用程序,由于其中存在错误,粘性服务也不会重新启动。在 Android 12 上测试。

© www.soinside.com 2019 - 2024. All rights reserved.