嗨,那边的安卓极客,
我正在开发一个使用'com.firebase:firebase-jobdispatcher:0.8.5'
来安排作业的应用程序。但是作业不会在测试的设备中执行。
当我检查dumpsys activity service GcmService
时,我得到了以下日志,其中我的作业被标记为尚未运行。
这种行为的可能原因是什么? 我还发现了类似READY_BATTERY_LOW的状态,是因为我的设备电池电量不足吗?但是在进行测试时,该设备的电池电量为58%。
此外,该设备已连接到Jio 4g网络。
dumpsys
日志包含在下面,任何人都可以对这个问题发表一些评论。 :)
(scheduled( com.mypackage.testapp/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="test-sync-job" trigger=window{start=300s,end=360s,earliest=-459s,latest=-399s} requirements=[NET_ANY] 属性=[RECURRING] scheduled=-759s last_run=N/A jid=N/A status=READY_BATTERY_LOWretries=0 client_lib=FIREBASE_JOB_DISPATCHER-1}
尚未运行。
提前致谢:)
这是做职业的一点。
Driver = new GooglePlayDriver(context);
firebaseJobDispatcher = new FirebaseJobDispatcher(driver);
Occupation constraintReminderJob = firebaseJobDispatcher.newJobBuilder()
.setService(ReminderService.class)
.setTag(REMINDER_JOB_TAG)
.setConstraints(Constraint.DEVICE_CHARGING)
.setLifetime(Lifetime.FOREVER)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(
REMINDER_INTERVAL_SECONDS,
REMINDER_INTERVAL_SECONDS + SYNC_FLEXTIME_SECONDS
))
.setReplaceCurrent(true)
.assemble();
firebaseJobDispatcher.schedule(constraintReminderJob);
我们调查上述废料怎么样?
职业
有一些归属于职业。
一个字符串标签,(在应用程序内部(特别识别作业。
一个 JobService 子类,它将包含与 Job 标识的所有业务原理。
作业触发器将确定所创建的作业当前已准备好执行。
需要安排约束,同时牢记执行所做活动的最终目标。当然,它是未填充的,这意味着当启动 JobTrigger 时,作业将继续运行。
重试策略负责处理失望条件。默认设置是利用指数退避过程。
指示它应该保持计划的活动季节的生命周期。这
默认设置是将作业保持计划,直到下一次启动。
套餐是针对客户提供的附加物品。这是一个自由参数。
布尔值演示作业是否应重新哈希。默认值为 false,这意味着计划的作业将只执行一次。
布尔值显示预订的作业是否应取代任何先前的作业
是否具有类似的标签。此布尔横幅的默认激励为 false。
准备好活动后,您可以利用 plan(( 策略来计划活动。
open static void scheduleJob(Context setting) {
FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(context));
Occupation work = createJob(dispatcher);
dispatcher.schedule(job);
}
ReminderService.class
open class ReminderService broadens JobService {
/**
* This asynctask will run a vocation once conditions are met with the imperatives
* As soon as client gadget gets associated with the power supply. it will produce
* a warning demonstrating that condition is met.
*/
private AsyncTask mBackgroundTask;
@Override
open boolean onStartJob(final jobParameters) {
mBackgroundTask = new AsyncTask() {
@Override
ensured Object doInBackground(Object[] objects) {
Setting = ReminderService.this;
ReminderTasks.executeTasks(context, ReminderTasks.ACTION_CHARGING_REMINDER);
Log.i("TAG", "onStartJob");
return invalid;
}
@Override
secured void onPostExecute(Object o) {
/* false means, that activity is finished. we would prefer not to reschedule it*/
jobFinished(jobParameters, false);
Log.i("TAG", "onStartJob-OnPost");
}
};
mBackgroundTask.execute();
return genuine;
}
@Override
open boolean onStopJob(JobParameters jobParameters) {
on the off chance that (mBackgroundTask != invalid) {
mBackgroundTask.cancel(true);
}
Log.i("TAG", "onStopJob");
/* genuine means, we're not done, if you don't mind reschedule */
return genuine;
}
}
在使用FireBase Job Dispatcher时,将使用三种策略。
onStartJob(JobParameters params( - 这是调用职业时将召唤的基本策略。它继续在基本字符串上运行。它将恢复一个布尔值,该布尔值告诉占领是否仍然存在。回归真实表明还有更多的工作要做。我们可以在活动完成后调用 jobDone((。
onStopJob(JobParameters params( - 当您的活动停止时,将考虑此技术。如果再也不会满足与活动相关的运行限制,则活动可能会因不同的原因而停止。它将恢复一个布尔值,该布尔值告诉是否应该再次尝试工作。如果真正返回的偶然机会,此时,系统将再次设置此活动以执行。
jobDone(JobParameters params, boolean needsReschedule( - 当工作被卸载到另一个字符串时,应该显式调用它。