当前位置: 首页 > 知识库问答 >
问题:

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

艾泽语
2023-03-14

我已经将我的应用程序升级到了API 26,我面临着一些新的后台执行限制问题。

在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

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

它们都在onstart命令中返回START_STICKY,该命令应该告诉操作系统,服务在被终止后应该重新启动,因为它在文档中的状态是:

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

从onStartCommand(Intent,int,int)返回的常量:如果此服务的进程在启动时(从onStartCommand(Intent,int,int)返回后)被终止,则将其保持在已启动状态,但不保留此交付的意图。稍后,系统将尝试重新创建服务。

知道我做错了什么吗?

是否可以在不显式调用starService或bindService方法的情况下恢复服务?

共有2个答案

华锦程
2023-03-14

当您的应用被设置为限制在后台运行时,也可能会发生这种情况(转到应用的设置,然后转到电池,并寻找选项“允许后台活动”)。如果应用受到限制,服务将在几分钟后自动停止。

乜璞瑜
2023-03-14

从Android O开始,应用程序访问后台服务的自由度受到限制。如果应用程序未在前台运行,则操作系统会终止服务,就像调用stopSelf()。这就是为什么在这种情况下,START\u STICKY无法拯救的原因。

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

 类似资料:
  • 我正在创建在状态栏中显示通知图标的应用程序。当用户打开状态栏并点击图标时,应用程序应该被启动。 我正在寻找一种方法来避免在这次发布期间重新创建应用程序。我已经创建了测试应用程序,并将日志消息添加到处理程序onCreate、onRestart、onResume、onStop和onDestroy中。日志消息说明了问题: 用户启动应用程序-onCreate、onResume 步骤7的行为与步骤3和5的行

  • 我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。 我的问题是,如何在5分钟内检测到空闲代码?

  • 我如何“强制”Espresso执行一个动作(单击取消),即使应用程序没有空闲?

  • 我们在Android8.1及以上版本中偶然发现了一个我们以前从未见过的问题,不幸的是,这使得我们的应用程序对我们的用户来说不太方便。在Android 8.1及以上版本中,当用户刷屏杀死应用程序时,后台粘性服务不会重新启动。

  • 我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?