jjzjj

Android WorkManager 与 JobScheduler

coder 2023-06-08 原文

为什么我们需要新的 Android WorkManager如果我们已经有 JobScheduler以及一些具有相同功能的漂亮后端(AndroidJobFirebaseJobDispatcher)?它有什么 killer 级功能吗?因为我没有看到任何让我想要迁移到另一个调度程序。

最佳答案

“WorkManager 有很多不错的功能,但它的主要目标是在旧设备上使用 JobScheduler 的 API”...等等,但我们已经有了一些向后移植。他们怎么了?简而言之:

  1. FireaseJobDispatcher很好,但它需要 Google Play 来安排工作,例如,如果我们以中国为目标,那就不好了。

  2. 印象笔记的 AndroidJob是一个具有很多功能的优秀反向移植。恕我直言,它安排任何工作的最佳选择。但是现在最新版本的库在底层使用了前面提到的 WorkManager。而且,不幸的是,迟早the library will be deprecated :

If you start a new project, you should be using WorkManager instead of this library. You should also start migrating your code from this library to WorkManager. At some point in the future this library will be deprecated.

他们建议切换到 WorkManager,因为它提供了更多的功能,并且他们还给了我们一个简短的比较:

|   Feature          | android-job | WorkManager |
| ------------------ | ----------- | ----------- |
| Exact jobs         | Yes         | No          |
| Transient jobs     | Yes         | No          |
| Daily jobs         | Yes         | No          |
| Custom Logger      | Yes         | No          |
| Observe job status | No          | Yes         |
| Chained jobs       | No          | Yes         |
| Work sequences     | No          | Yes         |

Imo,最后 3 个功能非常有用并且只有 WorkManager 支持。所以我最后一个问题的答案是肯定的,它确实有一些killer-features:

  • 无需 Google Play
  • 可查询
  • 可链接
  • 机会主义

要了解有关 WorkManager 的更多信息,请务必观看 this talk作者:苏米尔·卡塔利亚

附:如果有人知道为什么FirebaseJobDispatcher is actively supported by Google engineers而不是被弃用,写在下面的评论中:)

关于Android WorkManager 与 JobScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279364/

有关Android WorkManager 与 JobScheduler的更多相关文章

  1. android - 定期 JobScheduler 不遵守约束 - 2

    使用JobScheduler,我设置了一个简单的JobService如下:@TargetApi(21)publicclassSimpleJobServiceextendsJobService{privatestaticfinalStringTAG="SimpleJobService";@OverridepublicbooleanonStartJob(JobParametersjobParameters){if(jobParameters.isOverrideDeadlineExpired()){Log.d(TAG,"Thisshouldn'thappen");Toast.makeTex

  2. android - JobScheduler 的问题 - JobsService 多次触发 - 2

    我正在尝试在我的android应用程序中做一些后台工作。正如网络建议的那样,我正在使用JobScheduler来执行此操作。作业有时会触发5-15次而不是一次。有时他们从不开火。我的测试设备在5.1.1和7.0上运行。牛轧糖的火力远低于Lollipop的火力。这就是我启用作业的方式(5秒间隔仅用于测试目的):funenableTasks(){valjobScheduler=App.getContext().getSystemService(Context.JOB_SCHEDULER_SERVICE)asJobSchedulerif(PreferenceDao.getInstance()

  3. Android-JobScheduler 的 setPeriodic 将不起作用 - 2

    我编写了一个使用本地SqliteDatabase创建和提醒任务的应用程序。我编写了一个jobScheduler服务来检查设备时间和日期以及数据库中的任务,如果匹配则显示推送通知。我还想要在后台运行并每5秒检查一次数据的服务。但是当我写builder.setPeriodic(5000);builder.setPersisted(true);服务停止检查数据。这是我的代码主ActivitypublicclassMainActivityextendsAppCompatActivity{ImageButtonplusImageBtn;DatabaseHelperdatabaseHelper;B

  4. android - JobScheduler 可以执行前台服务吗? - 2

    这可能吗?我需要启动我的前台服务,因为我在UI线程中使用它,示例:每25分钟在我的应用中播放一个视频,该视频已关闭。 最佳答案 我认为这不是使用JobScheduler的最佳用例,但您可以!首先你应该创建publicclassExerciseJobServiceextendsJobService{privateContextcontext;publicExerciseJobService(Contextcontext){this.context=context}@OverridepublicbooleanonStartJob(Job

  5. android - JobScheduler.schedule(job) 没有启动 JobService - 2

    我正在使用lib让JobScheduler在Lollipop之前的设备上工作。我正在使用Lollipop设备。问题是mJobScheduler.schedule(job)应该启动我的jobservice但它没有启动。此外,当我包含.setPeriodic(2000)方法时,应用程序会因此崩溃堆栈跟踪。08-0600:37:06.72919693-19693/?E/AndroidRuntime:FATALEXCEPTION:mainProcess:rishabh.example.com.myapplication,PID:19693java.lang.RuntimeException:U

  6. android - JobScheduler setPeriodic 永远不会被调用 - 2

    我正在尝试使用JobScheduler每3秒安排一次作业。我已经准备好我的Job.Builder,但是当我安排工作时,onStartJob()仍然没有被调用。我不确定我缺少什么请帮助我。JobBuilder:ComponentNamecomponentName=newComponentName(this,JobSchedulerService.class);JobInfo.Builderbuilder=newJobInfo.Builder(0,componentName).setPeriodic(5*1000);JobSchedulerjobScheduler=(JobSchedule

  7. android - JobScheduler Android Oreo 问题 - 2

    在我当前的公司应用程序中,我有一个ForegroundService在工作人员值类(登录到应用程序)时运行。在用户登录时保持该前台服务运行很重要。为了从该前台服务以某种方式被终止(用户任务意外滑动或系统终止)的情况中恢复,我使用Jobscheduler实现了一个定期的JOB,它在它被获取时重新激活ForegroundService关闭。此技术在Android8OREO之前运行良好。START_STICKY和其他技术本身并不能解决问题。在Android8中,一旦前台服务被终止,周期性作业也会被终止。我在logcat中收到不允许作业运行的通知。据我了解,即使应用程序处于后台或被杀死,乔布斯

  8. android - 应用程序更新后,Android JobScheduler 或 GCM JobScheduler 是否保留作业? - 2

    我知道Androidnative(后Lollipop)JobScheduler和GCMJobScheduler都可以在重启后保留作业,但应用更新后呢?应用更新后我是否仍会调用作业?谢谢 最佳答案 关于GCM网络管理器:当GooglePlay服务或客户端应用程序更新时,所有计划任务都将被删除。GcmNetworkManager调用客户端应用程序的onInitializeTasks()。覆盖此函数以重新安排必要的任务。https://developers.google.com/cloud-messaging/network-manage

  9. Android 7 JobScheduler 在相机拍摄新照片时获取事件 - 2

    我在Android7上遇到一个问题,它不支持更长的广播事件“android.hardware.action.NEW_PICTURE”。我现在为Android7编写了一个JobService,但是当内部摄像头拍摄图片时它不会触发。不知道是什么问题,大家帮帮我。如果www中的任何示例源适用于Android7和JobService用于替换广播"android.hardware.action.NEW_PICTURE"。感谢您的帮助!这是我的示例代码:@RequiresApi(api=Build.VERSION_CODES.LOLLIPOP)publicclassZNJobServiceexte

  10. android - 一直运行 jobscheduler(是否打瞌睡) - 2

    如何在打瞌睡或非打瞌睡模式下运行jobscheduler,即我想一直运行bg作业。可能吗?JobInfojobInfo=newJobInfo.Builder(MYJOBID,jobService).setPeriodic(15*60*1000L).setExtras(bundle).setPersisted(true).build(); 最佳答案 有两种方法可以实现您想要的。将警报管理器与setExactAndAllowWhileIdle()结合使用或setAndAllowWhileIdle()使用WorkManager我个人建议您

随机推荐