JobService和后台Service对比

2019-11-11  本文已影响0人  百事可乐99

背景

Android 8.0以上版本在后台启动服务的时候,会报Not allowed to start service Intent { cmp=com.mymoney.sms/.service.CoreService }: app is in background uid UidRecord异常,官方介绍有两种方案可以解决这个问题,第一种是通过startForegroundService来启动一个前台进程。另一种就是使用JobSchedule。第一种方案有一个问题就是会生成一个通知,那么JobSchedule与后台Service的差别呢?

对比

  1. JobService的执行需要至少一个条件。没有条件的JobService是无法启动的,在创建JobInfo的时候会抛出异常。
  2. 启动时机上,JobService必须等待条件满足才会执行,Service是启动后立即执行
  3. Service的onStartCommand执行在UI线程,不可执行耗时任务。JobService的onStartJob也是执行在UI线程,但不同的是即使在jobService中开启了新线程,处理时间也不能超过10min,超过这个时间JobService会被强制销毁
  4. 不管应用是否处于前台,JobService都不能无限期运行,有 10 分钟的超时时间,会自动销毁,在 Android L 上这个时间是 1 分钟。因此 Job Scheduler 适用于短耗时的后台任务,不适用于连续的长时间的后台服务。
上一篇下一篇

猜你喜欢

热点阅读