gpt4 book ai didi

当应用程序从空闲状态返回时,Android 服务不会重新启动

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:21 25 4
gpt4 key购买 nike

我已将我的应用程序升级到 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

然后,我尝试再次启动我的应用程序,最后一个 Activity 已正确恢复(包括其 fragment 和显示的所有数据)

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,它应该告诉操作系统该服务应该在被杀死后重新启动,因为它在 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 开始,应用访问后台服务的自由度受到限制。如果您的应用程序未在前台运行,则服务将被操作系统终止,就像调用 stopSelf() 一样。这就是为什么 START_STICKY 在这种情况下不会救援的原因。

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

关于当应用程序从空闲状态返回时,Android 服务不会重新启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51357772/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com