Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何安排更多具有相同id的作业_Android_Android Jobscheduler - Fatal编程技术网

Android 如何安排更多具有相同id的作业

Android 如何安排更多具有相同id的作业,android,android-jobscheduler,Android,Android Jobscheduler,我想使用android JobScheduler来安排一个或多个作业。问题是作业id。如何每次选择不同的作业?如果我计划使用相同id的新工作,则旧作业将被删除。我需要一些类似enqueuWork的东西,但你需要Api级别26,我的最小Api级别是21。我该怎么做?每个工作都与同一个工作相关,例如:发送邮件。它只是一个作业,但可以有多个实例。不确定JobScheduler是否有该选项,但如果您能够将其更改为另一个组件,我建议您: 它有以下选项:.setReplaceCurrentfalse 我不得

我想使用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);