那边的Android怪胎
我正在开发一个使用'com.firebase:firebase-jobdispatcher:0.8.5'
来调度作业的应用程序。但是作业无法在经过测试的设备中执行。
当我检查dumpsys activity service GcmService
时,收到以下日志,其中我的作业标记为 尚未运行。
此行为的可能原因是什么? 我还发现了类似 READY_BATTERY_LOW 的状态,是否是因为我的设备电池电量不足?但是在进行测试时,该设备的电池电量为58%。
此外,该设备已连接到Jio 4g网络。
下面包含dumpsys
日志,如果有人有任何评论可以阐明此问题。 :)
(预定)com.mypackage.testapp / com.firebase.jobdispatcher.GooglePlayReceiver {u = 0 tag =“ test-sync-job” trigger = window {start = 300s,end = 360s,最早= -459s,最新= -399s}要求= [NET_ANY]属性= [预定] =-759s last_run =不适用jid =不适用status = READY_BATTERY_LOW 重试= 0 client_lib = FIREBASE_JOB_DISPATCHER-1}
尚未运行。
预先感谢:)
答案 0 :(得分:-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将确定制作的Job目前准备执行。
需要安排约束条件,并牢记执行已完成活动的最终目标。当然,它没有填充,这意味着在启动JobTrigger时Job将保持运行。
RetryStrategy负责处理令人失望的情况。默认值采用指数退避程序。
一生,表明应该保持计划的活动的季节。
默认值是保持作业计划到下一次引导。
包装用于客户提供的其他物品。这是一个任意参数。
一个布尔值表明作业是否应该重新哈希。默认值为false,这意味着计划的作业将仅执行一次。
布尔值显示预订的Job是否应取代任何先前的Job
带有或没有类似标签的标签。此布尔值横幅的默认激励为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)-这是调用一项职业时会想到的基本策略。它继续在基本字符串上运行。它将恢复一个布尔值,该布尔值指示是否剩余职业。退货正品表明还有更多工作要做。活动结束后,我们可以调用jobFinished()。
onStopJob(JobParameters params)-当您的活动停止时,将考虑使用此技术。如果不再满足与该活动相关的运行限制,则由于不同的原因可以暂停该活动。它将恢复一个布尔值,该布尔值指示是否应该再次尝试工作。在真正返回的偶然机会上,此时,系统将再次设置此活动以执行。
jobFinished(JobParameters params,boolean needsReschedule)-当工作已卸载到另一个字符串时,应该明确地调用它。