编程语言
首页 > 编程语言> > 当应用程序从空闲状态恢复时,Android服务未重新启动

当应用程序从空闲状态恢复时,Android服务未重新启动

作者:互联网

我已经将我的应用升级到API 26,而新的background execution limits却遇到了一些问题.

在Oreo设备上,我的应用程序进入后台后,由于日志中记录的空闲状态,我的应用程序被操作系统停止:

Stopping service due to app idle: u0a80 com.example.test/com.example.test.service1
Stopping service due to app idle: u0a80 com.example.test/com.example.test.service2

然后,我尝试再次启动我的应用程序,并且正确还原了上一个活动(包括其片段和显示的所有数据)

07-16 10:21:51.253 system_process I/ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.example.test/com.example.test.activity1 bnds=[317,1159][586,1508]} from uid 10024

问题是我的服务没有重新启动.

它们都在onStartCommand中返回START_STICKY,这应该告诉OS服务被杀死后应重新启动,因为它处于documentation的状态:

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

Constant to return from onStartCommand(Intent, int, int): if this
service’s process is killed while it is started (after returning from
onStartCommand(Intent, int, int)), then leave it in the started state
but don’t retain this delivered intent. Later the system will try to
re-create the service.

知道我在做什么错吗?

是否可以在不显式调用startService或bindService方法的情况下还原服务?

解决方法:

从Android O开始,应用程序可以自由访问后台服务的方式受到限制.如果您的应用程序未在运行,则服务将由OS终止,就像调用stopSelf()一样.这就是START_STICKY在这种情况下无法救援的原因.

您需要在创建Activity时重新启动服务,或者创建ForegroundService并执行直到完成任务.

标签:background,android,service,android-8-0-oreo
来源: https://codeday.me/bug/20191108/2009917.html