问题标签 [android-jobscheduler]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
525 浏览

android - 无论应用程序是关闭还是从内存中删除,都让作业运行并每 2 分钟进行一次池化

我正在使用 android-priority-job-queue 'com.github.yigit:android-priority-jobqueue'。确保它每 2 分钟运行一次。下面是代码

但只要应用程序关闭或从内存中删除,它就会暂停。当应用程序关闭或从内存中删除时,如何使作业连续运行并每 2 分钟进行一次池化。有没有像粘性服务或android.permission.BIND_JOB_SERVICE之类的东西?

构建服务器池系统。需要以上 API 15。

0 投票
1 回答
10638 浏览

android - Android JobScheduler:如果你用周期性时间调度同一个作业,它会重新开始这个周期吗?

如果我安排了相同的定期作业(相同的作业 ID)并且该作业已被安排,会发生什么情况?它会从头开始吗?

例如,我两次调用此方法:

第二次安排作业是否会导致定期计时器再次开始计数?

0 投票
0 回答
447 浏览

android - 如何在 android 21 及更高版本中使用 api+job 调度程序更新 Sqlite 数据库?

我正在尝试使用 Job Scheduler 来更新 sqlite 数据库。但是当我启动应用程序时,它崩溃了,并且在日志中它说它找不到表。有人可以告诉我我做错了什么吗?

0 投票
1 回答
3316 浏览

android - How to return results from a JobService?

I'm playing a bit with Android and writing a small app with an activity and a service. The activity starts the service on button click and it should fetch some data from a URI and return it as a result. Sometimes, data is not available or doesn't meet a criteria, and then the service should retry every X minutes even if the activity is in the background.

I've implemented the communication between the activity and the service via Intent and ResultReceiver (passed in the bundle). When implementing the service, I wanted to use the new JobScheduler component but then saw it can only accept a PersistableBundle which can't add a Parcelable object (ResultReceiver) but only the basic types.

I want the service to schedule a job that will run when network is available and every X minutes to check for data. Once it gets it, I want the data to be returned to the service so it can decide if it's acceptable or we need to retry again. If the service accepts the data, it will return it to the activity via the ResultsReceiver.

I can't use ResultsReceiver with the JobService, and it since I don't construct the JobService instance (done by the JobInfo.Builder), I can't pass it a reference to a callback object.

How can I communicate between a scheduled job and the service that invoked it?

Sorry if it's trivial, I'm not familiar with Android..

Thanks!

0 投票
3 回答
13225 浏览

java - Android jobScheduler 不会停止 jobFinished(params, false)

我正在尝试创建一个jobService。这是 onStartJob() 的样子。

这是应该开始工作的代码。

我不能让它停下来。它只是保持每1-5分钟发射一次。我将 jobFinished(params, false) 放入 onStartJob() 并注释掉任务以在它开始后立即将其杀死,但它只是不断触发。似乎 jobFinished() 触发了一些事情,因为 onDestroy() 被调用并且我的服务被破坏了,但是随后另一个具有相同 ID 的作业进入并重新启动它。

就像每个示例所示,我在清单中有 BIND_JOB_SERVICE。

关于为什么 jobFinished(params, false) 似乎没有杀死 setPeriodic(60000) 的任何想法?

0 投票
1 回答
191 浏览

android - LocalBroadcastManager 广播未使用

Intent我广播的sLocalBroadcastManager似乎没有被消耗,而是在积累。每次我发送广播时,我都会收到它和之前发送的所有广播,在onReceive.

在期刊中JobService,我正在BroadcastReceiver使用 an创建一个IntentFilter并使用lbm.registerReceiver(receiver, intentFilter);. 然后我启动 a Service,它在其构造函数中创建Intent具有相同过滤器的 a ,并执行lbm.sendBroadcast(intent);一次,然后自行停止。 sendBroadcast返回 true ,表明它是在另一端收到的(请参阅是否有办法判断是否收到了 LocalBroadcastManager 广播?)。然而,每次重复此循环时,都会Intents再次接收所有先前接收到的信息。通过捆绑一个时间戳,我已经确认它真的是旧的只是躺在周围并被一遍又一遍地接收。

我如何“消费”收到的Intent?据我所知,如果它是由 onReceive 接收的,这应该是没有必要的。Intent我在或中找不到任何取消广播的方法LocalBroadcastManager

我怎样才能只接收一次广播?

0 投票
2 回答
1881 浏览

android - Android - JobScheduler 或 BroadcastReceiver?

在我的 Android 应用程序中,每次用户插入设备时,我都需要做一些工作。为此,我现在使用一个 BroadcastReceiver,它会在用户插入设备时启动我的 IntentService 来完成工作,并在设备拔出时停止它。

现在我正在考虑将 JobScheduler 用于 Android 5.0+,但我看到的是,使用 JobScheduler,我必须在应用程序中安排我的工作,方法是调用

但这对我来说是个问题,因为我希望每次用户将他们的设备连接到充电器时我的工作都可以运行,即使用户不必打开我的应用程序。

出于这个原因,我认为一种方法是在用户第一次打开应用程序时安排它,然后总是强制重新安排,因为我不能相信用户每天都打开我的应用程序(由于我的应用程序的性质,当然不会发生)。

那么,我应该坚持使用 BroadcastReceiver 还是使用 Android 5.0+ 的 JobScheduler?

在使用 JobScheduler 的情况下,我是否应该只安排一次作业,然后总是返回 true 以强制重新安排?

谢谢你。

0 投票
1 回答
1793 浏览

android - Android JobScheduler setRequiresDeviceIdle

JobInfo.Builder 中的“setRequireDeviceIdle”方法究竟是如何工作的?根据我在 Android 文档(https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresDeviceIdle(boolean))中的理解,它应该保证只有在没有交互的情况下才会启动您的作业与设备。

我的经历不一样:

如果我退出我的应用程序并开始使用另一个应用程序,我是否处于活动状态并不重要,因为该作业将始终在 10 秒后运行。

0 投票
3 回答
5297 浏览

android - 在 Android 上,总是调用 onStopJob 吗?

我正在尝试实现我的第一个 JobService。我知道调用onStartJob实际上是有保证的(是的,如果我在没有过期时间的情况下指定了一些令人发指的要求,那么会有一些优势)。但是怎么样onStopJob?能保证被调用吗?

具体来说,我有一项将在后台执行的工作。但我有办法知道工作何时完成(例如 sharedPrefs)。我希望依靠 onStopJob 何时被调用来向用户发送工作完成的通知。

注意: onStopJob 是发送通知的方便位置,因为我已经在检查作业是否已完成,以便知道是否应该重试。

ps 需要考虑的事情可能会有所帮助(我也在考虑):如果我的onStartJob返回为真,系统如何知道我的作业何时停止运行,除非它调用onStopJob

0 投票
1 回答
14845 浏览

android - Firebase JobDispatcher - 与以前的 API(JobScheduler 和 GcmTaskService)相比,它是如何工作的?

背景

Google 有多种作业/任务调度解决方案,例如JobSchedulerGcmTaskService. 每个都有自己的优点和缺点。

最近,谷歌推出了一个名为“Firebase JobDispatcher”的新库。

问题

遗憾的是,关于这个新 API 的内容很少。事实上,很难找到任何关于它的东西。

我唯一找到的是他们的公告视频一个样本。但即使是他们,也没有太多关于这个 API 的知识。

问题

查看我之前与其他 API 的问题、调查和比较(例如,此处),我想问一下新 API 的工作原理以及使用它时要考虑的事项:

  1. 作业是否可以有参数保留,甚至可以在需要时进行修改?他们在示例中说“用户提供的附加功能的可选捆绑包。默认为空捆绑包。 ”是这样吗?它可以在执行时被作业修改吗?

  2. 可以轻松地重新安排工作吗?据说“一个布尔值,指示作业是否应该重复”。如何选择何时重新安排?我已经尝试了该示例,并选择了“重复”,但它似乎没有再次运行,只有一次。

  3. 与图书馆的工作相比,它可以受到保护吗(因为唯一的 ID)?

  4. 更新应用程序时是否需要格外小心(就像以前的 API 一样)?应用程序更新后仍可以安排工作吗?对样本进行测试,似乎在更新应用程序后工作完全消失了。可以避免吗?

  5. RECEIVE_BOOT_COMPLETED如果我希望即使在设备重新启动时仍能安排作业,是否需要它?样品似乎有它。

  6. 是否可以获得所有计划作业及其信息(包括参数)的列表,并能够取消特定/全部甚至修改它们?

  7. 应用清数据操作后作业会被删除吗?

  8. 是否可以告诉作业最好在某个时间范围内运行(例如:早上 7:00 到 8:00 之间)?提到了“ ExecutionWindowTrigger-它指定了应执行Job的时间窗口”。是这样吗?当它错过这个窗口时会发生什么?

  9. onStartJob类中的方法JobService返回一个布尔值,它的描述是“是否还有更多的工作剩余”。这是什么意思?needsReschedule方法的参数是什么jobFinished意思?它们相互关联吗?

  10. 有什么我应该知道的限制吗?例如每个函数的最小值和最大值?