我已经将我的应用程序升级到了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方法的情况下恢复服务?
当您的应用被设置为限制在后台运行时,也可能会发生这种情况(转到应用的设置,然后转到电池,并寻找选项“允许后台活动”)。如果应用受到限制,服务将在几分钟后自动停止。
从Android O开始,应用程序访问后台服务的自由度受到限制。如果应用程序未在前台运行,则操作系统会终止服务,就像调用了stopSelf()
。这就是为什么在这种情况下,START\u STICKY
无法拯救的原因。
您需要在创建活动时重新启动服务,或者创建ForegroundService并执行,直到任务完成。
我正在创建在状态栏中显示通知图标的应用程序。当用户打开状态栏并点击图标时,应用程序应该被启动。 我正在寻找一种方法来避免在这次发布期间重新创建应用程序。我已经创建了测试应用程序,并将日志消息添加到处理程序onCreate、onRestart、onResume、onStop和onDestroy中。日志消息说明了问题: 用户启动应用程序-onCreate、onResume 步骤7的行为与步骤3和5的行
我正在开发一个将在Kiosk模式下运行的应用程序。在这个应用程序中,如果用户在5分钟内没有在应用程序中做任何事情,应用程序将显示一个屏幕保护程序,这是应用程序的徽标。 我的问题是,如何在5分钟内检测到空闲代码?
我如何“强制”Espresso执行一个动作(单击取消),即使应用程序没有空闲?
我有一个Restendpoint,如果没有产品,它将返回204,以及以下通用角度服务: 和 但是,当服务生成 204 代码时,我收到以下错误: TypeError:无法读取null的属性“status” 这怎么可能发生?如果 API 以 204 响应,为什么整个响应为空?
我们在Android8.1及以上版本中偶然发现了一个我们以前从未见过的问题,不幸的是,这使得我们的应用程序对我们的用户来说不太方便。在Android 8.1及以上版本中,当用户刷屏杀死应用程序时,后台粘性服务不会重新启动。