我正在从工作管理器doWork方法启动前台服务。
-
这样做可以吗?
-
startForegroundService应在5秒内调用startForeground,否则将发生异常。如何防止这种情况发生?(注意,我在onCreate of Service中添加了startForeground(
override fun doWork(): Result { val intent = Intent() intent.setClassName(App.context.packageName, "com.xyz.MySerivce") intent.putExtra("sync_service_initiate", true) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { applicationContext.startForegroundService(intent) applicationContext.stopService(intent) } else { applicationContext.startService(intent) } return Result.success() }
在Android 12及以上版本中,您无法从后台线程启动前台服务,因此由于此限制,这是不可能的。工作管理器将在第一次执行前景服务时启动前景服务,但由于工作人员每15分钟执行一次,因此当它第二次尝试执行前景服务后,您将收到警告或错误,即工作人员无法从后台线程启动前景服务。