START_STICKY无法正常工作

时间:2015-11-14 16:35:22

标签: android service

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

android doc说如果android在低内存状态下返回onStartCommand时使用START_STICKY杀死一个服务,那么如果我是正确的话,它会重新创建服务。

但是这段服务在一段时间后被杀死并在运行任务中消失但是没有重新创建!我在手机上运行Android 4.4.2中的这项服务,当屏幕打开时,它存活了大约20分钟 但是当屏幕关闭时它在大约3或4分钟后消失...在我的平板电脑上(再次安装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();
    }
}

因为英语不好而致:)

2 个答案:

答案 0 :(得分:6)

可能对某人有用 -

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

因此有些设备(HUAWEI,LAVA,XIAOMI)附带预先安装的启动管理器或节能器,并且它们运行在自定义的Android ROM上。所以这些设备通常不会提供粘性服务。

所以可能的选择是实现看门狗定时器之类的东西并检查其间的服务,如果没有启动,服务可以再次运行。可能的影响可能是电池消耗。

答案 1 :(得分:1)

重新创建服务 重新启动。 如果您覆盖onCreate并执行Log.d或Toast,您将看到在活动和应用程序销毁后onCreate被调用。

因此,重新创建代码后使其保持运行的诀窍是使用onCreate方法编写代码,并将onStartCommand仅用于return START_STICKY