首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

作业调度setRequiresDeviceIdle(true)和setPeriodic()不工作

作业调度是指在特定的时间间隔或特定的条件下执行任务的机制。在Android开发中,可以使用JobScheduler来进行作业调度。setRequiresDeviceIdle(true)和setPeriodic()是JobInfo.Builder类中的两个方法,用于设置作业调度的条件和执行周期。

setRequiresDeviceIdle(true)是用来设置作业调度需要设备处于空闲状态时才能执行。空闲状态指的是设备没有用户交互、屏幕关闭且没有正在运行的前台服务。这个条件可以用来确保作业在设备不活跃时执行,以避免对用户造成干扰。

setPeriodic()是用来设置作业调度的执行周期。可以通过指定一个时间间隔来让作业定期执行。这个方法接受一个时间间隔参数,单位为毫秒,表示作业的执行周期。

然而,setRequiresDeviceIdle(true)和setPeriodic()在某些情况下可能不会按预期工作。这可能是由于以下原因:

  1. 设备空闲状态条件不满足:如果设备一直处于活跃状态,即有用户交互、屏幕开启或有前台服务运行,那么setRequiresDeviceIdle(true)设置将不起作用,作业调度不会执行。
  2. 作业调度被系统优化:Android系统可能会根据设备的资源使用情况对作业调度进行优化,以节省电量和提高性能。这可能导致setPeriodic()设置的执行周期被调整或延迟执行。

为了解决这些问题,可以考虑以下方法:

  1. 使用其他条件:除了setRequiresDeviceIdle(true)之外,还可以使用其他条件来触发作业调度的执行,例如setRequiresCharging(true)表示需要设备充电时才能执行。
  2. 使用Flex时间:可以通过setPeriodic()方法的第二个参数来设置一个灵活的时间间隔,即Flex时间。Flex时间表示在执行周期内的任意时间点都可以执行作业调度,这样可以提高作业的执行机会。
  3. 结合其他调度机制:除了JobScheduler,Android还提供了其他的调度机制,如AlarmManager和Handler等。可以结合使用这些机制来实现更灵活和精确的作业调度。

腾讯云相关产品和产品介绍链接地址:

请注意,以上链接仅供参考,具体的产品选择应根据实际需求和情况进行评估和决策。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(一百四十三)任务调度JobScheduler

setRequiresCharging:是否在充电时执行 setRequiresDeviceIdle:是否在空闲时执行 setPeriodic:设置时间间隔,单位毫秒。...在Service外部进行调度 在Activity代码中增加任务调度,需要声明JobInfo对象,并通过JobScheduler进行调度,具体代码如下所示: //将任务作业发送到作业调度中去 public...); //是否在空闲时执行 //builder.setPeriodic(1000); //设置时间间隔,单位毫秒 //setPeriodic不能setMinimumLatency、setOverrideDeadline...params) { Log.d(TAG, "onStopJob"); mHandler.removeMessages(0); return true; } //将任务作业发送到作业调度中去...builder.setRequiresCharging(false); //是否在充电时执行 builder.setRequiresDeviceIdle(false); //是否在空闲时执行 builder.setPeriodic

1.1K30
  • Android之任务调度WorkManagerJobSchedule的使用

    设置重试退避策略 将输入数据传递给工作 使用标记将相关工作分组在一起 WorkRequest 对象包含 WorkManager 调度运行工作所需的所有信息。...其中包括运行工作必须满足的约束、调度信息(例如延迟或重复间隔)、重试配置,并且可能包含输入数据(如果工作需要)。 WorkRequest 本身是抽象基类。...顾名思义,OneTimeWorkRequest 适用于调度非重复性工作,而 PeriodicWorkRequest 则更适合调度以一定间隔重复执行的工作。...在获取执行间隔时,会先比较最小间隔时间设置的间隔时间,取其中大的那个。所以setPeriodic设置时间小于15分钟是不会生效的。...setMinimumLatencysetOverrideDeadline不能同setPeriodic一起使用,会引起报错。

    3.6K10

    WorkManager _Android新架构组件

    Worker:在WorkManager世界中,Worker等同于需要在后台执行的任务或作业。这是一个抽象类。你需要继承它。您的Worker类包含有关如何执行该任务的信息,但它没有关于何时运行的信息。...WorkRequest:它代表了工作调度请求。每个工作必须在安排工作之前创建工作请求。 WorkRequest将包含工作的唯一标识,约束条件说明应在哪种情况下执行任务。这是一个抽象类。...WorkManager:它是基于WorkRequest中定义的约束来管理调度任务的类。 WorkStatus:这个类包装了任何work请求的状态,你可以通过唯一的id来查询任何work的状态。...Constraints that defines when the task should runval myConstraints = Constraints.Builder() .setRequiresDeviceIdle...(true) .setRequiresCharging(true) // Many other constraints are available, see the

    2.7K20

    玩转全新的 Android 8.0 Oreo 后台策略

    以下是 jobId 的官方描述: 应用为这个作业提供的 ID。 随后调用取消,或创建相同 jobId 的作业, 将会更新已经存在的同一个 ID 的作业。...只要您的前缀 channelId 组合成一个溢出的 Integer,它就能有效运作。但边际处理在坚实的软件工程中至关重要。所以,除非您真的走投无路,否则就强制为 Short 类型吧。...该类可以为应用的所有作业生成 jobId:无论这些工作是否与频道、用户或者其他任何事情有关。...一个作业类型与用户偏好有关,一个与用户行为有关。JobIdManager 通过为每个作业类型分配一个不同的前缀来覆盖以上种类型。...channelId); JobInfo.Builder builder = new JobInfo.Builder(jobId, componentName); builder.setPersisted(true

    99840

    如何使用WorkManager执行后台任务(上)

    0x00 简述 WorkManager 是 Android Jetpack中的一部分,它主要是封装了 Android 后台任务的调度逻辑。...WorkRequest也是一个抽象类,使用的时候是框架库中提供的子类 OneTimeWorkRequest PeriodicWorkRequest类,分别代表一次性任务周期任务 WorkRequest.Builder...WorkManager:工作任务管理器,它是用于管理工作任务的请求队列的类。通过它可以把一个 WorkRequest加入到任务队列中,然后根据系统的资源和约束条件对工作任务进行调度。...Constraints object that defines when the task should run val myConstraints = Constraints.Builder() .setRequiresDeviceIdle...(true) .setRequiresCharging(true) // Many other constraints are available, see the

    1.6K20

    Springmvc中配置Quartz使用,实现任务实时调度

    简单介绍: Quartz 是个开源的作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。Quartz 允许开发人员根据时间间隔(或天)来调度作业。...它实现了作业触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz 的应用程序可以重用来自不同事件的作业,还可以为一个事件组合多个作业。...结果就是作业不能访问 Web 服务器的内部函数;例如,在使用 WebSphere 应用服务器时,由 Quartz 调度作业并不能影响服务器的动态缓存和数据源。...作业触发器 Quartz 调度包的两个基本单元是作业触发器。作业 是能够调度的可执行任务,触发器 提供了对作业调度。...通过把要执行的工作与它的调度分开,Quartz 允许在丢失作业本身或作业的上下文的情况下,修改调度触发器。而且,任何单个的作业都可以有多个触发器与其关联。

    1.7K20

    Fair Scheduler

    两个用户AB,分别拥有自己的队列,A启动一个作业,在B没有需求的时候A会分配到全部可用的资源,当A的作业仍在运行时B启动一个作业,一段时间后,每个作业都会拥有集群的一半资源,这时如果B启动第二个作业且其他作业扔在运行...,那么B的第二个作业B的第一个作业共享资源,因此B的两个作业分别占集群的1/4资源,而A仍然占集群的一半资源,最终资源在用户之间实现了公平共享。...Fair Scheduler 高级工作机制 (1) 抢占(preemption) 在一个繁忙的集群中,当提交一个job到一个空队列中,job不会立即启动,而是需要等待已经运行的job释放资源,为了使job...Yarn认为花费一些等待时间(超过几秒)去满足数据本地化是可以接受的,这个特性被称为延迟调度。...这个配置默认值为-1.0,代表不开启跨机架启动延迟调度。 3.

    1.6K40

    Quartz.NET 配置文件详解

    其中最重要的节点是 cron-expression  repeat-interval 节点,下面是每个节点的具体说明: 1. job 作业节点,每个作业则对应一个 job 节点。...5) durable(选填)     表示该作业是否长久的,具体作用不详,默认为true。 6) recover(选填)     字面意思是恢复,具体作用不详,默认为false。...2. trigger 作业触发器节点,用于定义指定的作业以何种方式触发,一个作业可以有多个触发器,而每个触发器都独立执行调度。...,之后再根据 cron-expression 执行作业调度;若大于当前时间,服务会等到当前时间等于 start-time 的时间才开始执行,并根据 cron-expression 执行作业调度。...如果在日字段上设置"LW",则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是区分大小写的,即MON与mon相同。 3. 常用示例: 0 0 12 * * ?

    2K20

    kettle调度监控平台(kettle-scheduler)开源

    但kettle本身的调度监控功能却非常弱。Pentaho官方都建议采用crontab(Unix平台)计划任务(Windows平台)来完成调度功能。...项目介绍 Kettle调度监控平台(以下简称KS)是一个自主开发的javaweb程序,专门用来调度监控由kettle客户端创建的jobtransformation。...KS整体的框架是由spring+sprin gmvc +beetlsql整合而成,通过调用kettle的API来执行转换作业,并且使用quartz框架完成调度工作。...项目源码:GitHub – zhaxiaodong9860/kettle-scheduler: 一款简单易用的Kettle调度监控平台,专门用来调度监控由kettle客户端创建的jobtransformation...整体的框架是由spring+sprin gmvc +beetlsql整合而成,通过调用kettle的API来执行转换作业,并且使用quartz框架完成调度工作

    9.1K150

    Python定时框架 Apscheduler 详解

    基本原理 总的来说,主要是利用python threading EventLock锁来写的。...### 基础概念 在Apscheduler中主要有以下几个非常重要的概念,主要如下: 触发器(trigger): 某一个工作到来时引发的事件,包含调度的逻辑,每一个作业都有它自己的触发器,用于决定哪个作业任务会执行...调度器(scheduler): 负责将上面几个组件联系在一起,一般在应用中只有一个调度器,程序开发者不会直接操作触发器、作业存储或执行器,而是利用调度器提供了处理这些合适的接口,作业存储执行器的配置都是通过在调度器中完成的...下面进行一个复杂的配置,同时使用两个作业存储两个执行器,在这个配置中,修改默认的配置参数,jobstored指的是job持久化,默认job运行在内存中,可持久化在数据库,指定为mongo的MongoDBJobStore...misfire_grace_time:单位为秒,假设有这么一种情况,当某一job被调度时刚好线程池都被占满,调度器会选择将该job排队运行,misfiregracetime参数则是在线程池有可用线程时会比对该

    1.9K20

    任务调度框架 Quartz

    示例用途: 驱动流程工作流:比如下新订单时,安排一个作业在 2 小时内触发检查该订单的状态,如果未收到订单确认消息,将订单的状态更改为“等待干预”。...系统维护:安排一项作业,在每个工作日晚上 11:30 将数据库内容转储到 XML 文件中。 在应用程序中提供提醒服务。...作业调度作业可被安排在特定触发器触发时运行,比如在一天中的某个时间,每周每月的特定日子,重复次数,无限重复等。 工作执行:写一个 实现 Job 接口的 Java 类即可。...监听器插件:可监听捕获调度事件以监视或控制作业/触发器行为 支持事务,支持集群故障转移 3....功能包括负载平衡作业故障转移(如果 JobDetail 的“请求恢复”标志设置为 true)。

    3K10

    SpringBoot3集成Quartz详细版

    org.quartz.scheduler.makeSchedulerThreadDaemon 一个布尔值(“true”或“false”),它指定调度程序的主线程应该是守护程序线程还是 。...RAMJobStore 的配置 将作业触发器存储在内存中 RAMJobStore 用于将调度信息(作业、触发器日历)存储在内存中。...在尝试调度(或取消调度作业/触发器之前,JTA 事务必须正在进行中。这允许调度的“工作”成为应用程序“更大”事务的一部分。...未标记为恢复的作业将只是在下次触发相关触发器时释放以执行。 群集功能最适合横向扩展长时间运行/或 CPU 密集型作业(分配工作负载 在多个节点上)。...群集功能最适合横向扩展长时间运行/或 CPU 密集型作业(分配工作负载 在多个节点上)。如果需要横向扩展以支持数千个短期运行(例如 1 秒)作业,请考虑 使用多个不同的计划程序对作业集进行分区。

    1.4K20

    深入解读Quartz的原理

    三、透过实例看原理 通过研读Quartz的源代码,本实例,终于悟出了Quartz的工作原理。...2、JobDetail是一个可执行的工作,它本身可能是有状态的。 3、Trigger代表一个调度参数的配置,什么时候去调。...4、当JobDetailTrigger在scheduler容器上注册后,形成了装配好的作业(JobDetailTrigger所组成的一对儿),就可以伴随容器启动而调度执行了。...四、总结 1、搞清楚了上Quartz容器执行作业的的原理过程,以及作业形成的方式,作业注册到容器的方法。就认识明白了Quartz的核心原理。...要想灵活配置作业容器属性,可以通过Quartz的properties文件或者XML来实现。 3、要想调度更多的持久化、结构化作业,可以通过数据库读取作业,然后放到容器中执行。

    1.8K30
    领券