Android service在某些Android版本上被kill后没法自动启动

Android widget插件,须要服务一直运行,定时更新时间及天气数据,可是在Android 7.0的设备上测试没有问题,虽然锁屏一段时间后,即手机进入休眠状态后,服务会暂停,但手机在亮屏的瞬间,服务会从新启动。这是在控制功耗的状况下比较完美解决。java

然鹅,运行在Android 9.0的设备上,问题就出现了,就算不锁屏运行一段时间后,服务都会自动终止,且没法从新启动,手机关机重启后,没启动。ide

在博客上看前辈的解决方案,大都是以下的解决方案性能

一、让服务持续运行而不受手机休眠的影响,要这样处理:
在onCreate里面添加:

pm = (PowerManager)MyApplicationHolder.getContext().getSystemService(Context.POWER_SERVICE);  
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myservice");  
wl.acquire();  
在onDestroy里添加:

wl.release();

这种处理方案显然不适合个人这种状况。测试

后来在onStartCommand方法中有几个变量:ui

解决方案:手动返回START_STICKY,亲测这样设置后,原问题解决,且观测手机唤醒曲线,证实这样设置不会形成额外的性能消耗。插件

@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
    flags = START_STICKY;  
    return super.onStartCommand(intent, flags, startId);  
}
相关文章
相关标签/搜索