- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的应用程序中使用 JobScheduler。如果用户连接到 WIFI,我想在每个小时后上传文件,但是 onStartJob()
方法在一小时前被调用,大部分是在 15-20 分钟后被调用。以下是我的代码:
ComponentName componentName = new ComponentName(this,UploadService.class);
JobInfo info = new JobInfo.Builder(1,componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) // change this later to wifi
.setPersisted(true)
.setPeriodic(60*60*10000)
.build();
JobScheduler scheduler = (JobScheduler)getSystemService(JOB_SCHEDULER_SERVICE);
int resultCode = scheduler.schedule(info);
if (resultCode==JobScheduler.RESULT_SUCCESS) {
Log.d(TAG,"JOb Scheduled");
} else {
Log.d(TAG,"Job Scheduling fail");
}
public class UploadService extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
uploadFileToServer(params);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return true;
}
.....
.....
}
此处 uploadFileToServer(params);
在一小时前被调用。如何设置时间,使其仅在一小时后调用。提前致谢
最佳答案
在 JobInfo.Builder
上使用此方法 setPeriodic (long intervalMillis, long flexMillis)
(在 API 24 中添加)并提供一个 flex interval 作为第二个参数:
long flexMillis = 59 * 60 * 1000; // wait 59 minutes before executing next job
JobInfo info = new JobInfo.Builder(1,componentName)
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) // change this later to wifi
.setPersisted(true)
.setPeriodic(60 * 60 * 1000, flexMillis)
.build();
重要 - 作业保证在弹性间隔(在最后一个作业完成后开始)之后运行,但不能保证在该时间之后立即运行,因此作业之间的持续时间可以超过 1 小时,具体取决于您的工作要求、系统状态等...
Specify that this job should recur with the provided interval and flex. The job can execute at any time in a window of flex length at the end of the period.
正如一些评论中已经推荐的那样,您应该开始使用新的 WorkManager (即使它还不是生产级别)具有与 JobScheduler
类似的功能,但它的最低 SDK 支持是 14,这将让您删除大量样板代码:)
关于android - JobScheduler 每 15 分钟执行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51304185/
我知道 Android native (后 Lollipop)JobScheduler 和 GCM JobScheduler 都可以在重启后保留作业,但应用更新后呢?应用更新后我是否仍会调用作业? 谢
如何模仿 Android JobScheduler (或 GcmNetworkManager )Android 上 RxJava 的行为? 具体来说,我想要这个功能 了解网络 Activity 自动退
我有一个 jobscheduler,它发送由启动警报触发并被结束警报取消的通知,我有一个问题,如果我从最近的应用程序中删除应用程序或我重新启动手机,警报会在指定时间触发吗?以及作业调度程序会发生什么
注意:这不是重复的,请阅读问题 我想在设备每次充电和 WIFI 时运行一个作业。每次满足这些条件时,该作业最多必须运行一次。这意味着如果我让手机在 wifi 开启的情况下充电一夜,工作就不会重复。只有
我想每天调用一个方法来在我的应用程序中生成僵尸。 以下方法应创建执行此操作的 JobScheduler。 我的问题是:我是只调用一次这个方法,还是可以在应用程序启动时每次都调用它? public st
我正在使用 JobScheduler.setPeriodic() 来重复我的 JobIntentService。它第一次工作但从不重复。运行于安卓7.0 并发检查.java int mdelaymil
这可能吗?我需要启动我的前台服务,因为我在 UI 线程中使用它, 示例:每 25 分钟在我的应用中播放一个视频,该视频已关闭。 最佳答案 我认为这不是使用 JobScheduler 的最佳用例,但您可
我检查了从 Android API 级别 21 开始可以使用的 JobScheduler API。我想安排一个需要互联网并且每天只运行一次或可选的每周运行一次的任务(如果成功执行)。我没有找到关于这种
在 Android 模拟器上运行时,我无法让 JobScheduler 启动计划作业。如果我在运行 Android 6.0.1 的真实Samsung Galaxy S7 和 Nexus 5X 上进行测
我想在每天的特定时间启动 JobScheduler,并在 3 小时后完成。 我每 20 分钟触发一次作业,持续 3 小时,但在 JobInfo.Builder 类中没有在准确时间启 Action 业的
我的应用使用这种经典模式来安排周期性任务: 通过 AlarmManager 设置准确的闹钟(通过 setExactAndAllowWhileIdle(),因为即使在打瞌睡时它也必须关闭) 通过 Wak
这是我设置工作的方式: val builder = JobInfo.Builder(1, ComponentName(this, PullDataJob::class.java))
如何重新安排我使用 setPeriodic() 启动的 JobScheduler,我想稍后通过用户输入更改调度程序时间。 JobInfo.Builder builder = new JobIn
JobInfo.Builder 中的方法“setRequireDeviceIdle”到底是如何工作的?根据我在 Android 文档 (https://developer.android.com/re
我们正在通过 JobScheduler 实现作业用于后台加载数据。这项工作每天大约会触发一次。我们可以使用哪些工具来测试此功能(可能是 ADB)? 用例能够模拟作业运行所需的条件,或者只是明确地说“运
我正在试用 Android Lollipop 附带的新 JoScheduler API。到目前为止,我已经成功地创建并运行了一个延迟为 6000 毫秒的作业,没有任何网络要求。 但是,我刚刚尝试通过使
STEP_COUNTER 传感器的 Android 文档有点困惑。 根据这个:Android Sensor doc我应该始终注册 STEP_COUNTER 传感器,否则计步器传感器根本不会计数。这一切
我正在学习如何在 Android 中结合使用 JobSchedule 和 AsyncTasks。按照一些指南,我有以下 JobService 实现: @RequiresApi(Build.VERSIO
jobscheduler 每 10 分钟定期运行一次。一旦应用程序运行并保持每 10 分钟定期运行一次,我必须做些什么才能运行计划。现在发生的情况是:安装应用程序后,运行计划需要 10 分钟。如何让它
我遵循了一些关于 android 中的作业调度的在线教程,我尝试这样做,发现下面的代码编译没有错误。但问题是 onPostExecute/doInBackground 返回消息中没有 toast。有什
我是一名优秀的程序员,十分优秀!