我创建了一个简单的服务,并使用startService(intent)从一个活动中调用它。我从我的服务的onStartCommand()返回START_STICKY。即使活动已关闭或从任务列表中删除,我希望服务继续运行。当我在模拟器上测试它工作正常 - 如果我从最近的屏幕列表中删除应用程序(通过滑动或全部清除),服务会在一秒后重新启动。但是在真实设备上(在Android 5.1上运行),该服务被终止但未启动。我可以看到以下消息。
04-22 20:26:26.436 714-1454 /? W / ActivityManager:在1000ms内调度崩溃服务com.example.xxx.MyPkg / .MyService的重新启动
04-22 20:26:26.441 714-1454 /? I / ActivityManager:强制停止服务ServiceRecord {9df8b23 u0 com.example.xxx.MyPkg / .MyService}
此外,在某些其他方面,我已使用Alarmmanager和PendingIntent安排了相同服务的启动。如果应用程序在最近的列表中,那么只有服务启动通过Alarm工作,否则不工作。再次,在模拟器上它工作正常。
我读了很多问题和答案,其中说START_STICKY在Kitkat和JellyBean中存在一些问题。有人建议在服务的onTaskRemoved()几秒后安排重启。但首先,我没有看到onTaskRemoved()在所有清算操作上被调用。其次,鉴于当任务列表中没有应用程序时,预定的服务启动不起作用,即使我从onTaskRemoved()或activity的onDestroy()安排,我也不确定它是否会工作。
有没有办法解决这个问题?