Android 如何安排更多具有相同id的作业
我想使用android JobScheduler来安排一个或多个作业。问题是作业id。如何每次选择不同的作业?如果我计划使用相同id的新工作,则旧作业将被删除。我需要一些类似enqueuWork的东西,但你需要Api级别26,我的最小Api级别是21。我该怎么做?每个工作都与同一个工作相关,例如:发送邮件。它只是一个作业,但可以有多个实例。不确定JobScheduler是否有该选项,但如果您能够将其更改为另一个组件,我建议您: 它有以下选项:.setReplaceCurrentfalseAndroid 如何安排更多具有相同id的作业,android,android-jobscheduler,Android,Android Jobscheduler,我想使用android JobScheduler来安排一个或多个作业。问题是作业id。如何每次选择不同的作业?如果我计划使用相同id的新工作,则旧作业将被删除。我需要一些类似enqueuWork的东西,但你需要Api级别26,我的最小Api级别是21。我该怎么做?每个工作都与同一个工作相关,例如:发送邮件。它只是一个作业,但可以有多个实例。不确定JobScheduler是否有该选项,但如果您能够将其更改为另一个组件,我建议您: 它有以下选项:.setReplaceCurrentfalse 我不得
我不得不使用它,它工作得非常好不确定JobScheduler是否有该选项,但如果您能够将其更改为另一个组件,我建议您: 它有以下选项:.setReplaceCurrentfalse 我不得不使用它,它工作得非常好您可以使用JobScheduler的getAllPendingJobs方法来查找可用的jobID。它将在挂起/运行时返回所有计划的挂起作业。JobSchedulerService在作业完成/完成后从此列表中删除作业 Obs.:Android文档描述: 检索此包在JobScheduler中挂起的所有作业 我已经在安卓M和N上测试了这个方法,它还返回正在运行的作业。作业完成后已删除。在Android源代码中,使用mJobs存储所有计划的作业以返回作业列表。当作业被删除时,它将从mJobs中删除,并且不会在getAllPendingJobs中返回。您可以使用JobScheduler的getAllPendingJobs方法查找可用的jobID。它将在挂起/运行时返回所有计划的挂起作业。JobSchedulerService在作业完成/完成后从此列表中删除作业 Obs.:Android文档描述: 检索此包在JobScheduler中挂起的所有作业
我已经在安卓M和N上测试了这个方法,它还返回正在运行的作业。作业完成后已删除。在Android源代码中,使用mJobs存储所有计划的作业以返回作业列表。当作业被删除时,它将从mJobs中删除,并且不会在getAllPendingJobs中返回。我正在使用它,但它与Google Play服务相关,因此我宁愿避免使用它,因为我的应用程序的最低级别为21,我只想使用内置的方法。@greywolf82如果是这样的话,我会使用一个基本标识符,并向其添加数字,以避免重叠。另外,我会将这些ID保存在sharedPref或数据库中。是的,我认为在这种情况下,旧的良好共享首选项是最好的解决方案。我使用过它,但它与Google Play服务有关,因此我宁愿避免使用它,因为我的应用程序具有最低级别21,我只想使用内置的方法。@greywolf82如果是这样的话,我会使用一个基本标识符,并向其添加数字,以避免重叠。另外,我会将这些ID保存在sharedPref或数据库中。是的,我认为旧的良好共享首选项是这种情况下的最佳解决方案。那么,为什么不使用jobId++和PersistableBundle作为作业标识符呢?@StanislavBondar How?您是否建议保存首选项中使用的最后一个jobId?那么为什么不使用jobId++和PersistableBundle作为作业标识符呢?@StanislavBondar How?您是否建议保存首选项中使用的最后一个jobId?从文档中看,它似乎只返回挂起的作业,而不是运行oneThank you,我已经分析并完成了这一点的回答。你需要更多的信息吗?从文档上看,它似乎只返回待处理的作业,而不是运行一个。谢谢你,我已经分析了这一点并完成了我的回答。你需要更多的信息吗?
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
Job myJob = dispatcher.newJobBuilder()
// the JobService that will be called
.setService(MyJobService.class)
// uniquely identifies the job
.setTag("my-unique-tag")
// one-off job
.setRecurring(false)
// don't persist past a device reboot
.setLifetime(Lifetime.UNTIL_NEXT_BOOT)
// start between 0 and 60 seconds from now
.setTrigger(Trigger.executionWindow(0, 60))
// don't overwrite an existing job with the same tag
.setReplaceCurrent(false)
// retry with exponential backoff
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
// constraints that need to be satisfied for the job to run
.setConstraints(
// only run on an unmetered network
Constraint.ON_UNMETERED_NETWORK,
// only run when the device is charging
Constraint.DEVICE_CHARGING
)
.setExtras(myExtrasBundle)
.build();
dispatcher.mustSchedule(myJob);