【问题标题】:Android Firebase Jobdispatcher not startingAndroid Firebase Jobdispatcher 未启动
【发布时间】:2018-09-13 06:40:05
【问题描述】:

嗨,Android 极客们,

我正在开发一个使用'com.firebase:firebase-jobdispatcher:0.8.5' 来安排作业的应用程序。但是作业没有在测试设备中执行。

当我检查dumpsys activity service GcmService 时,我得到了以下日志,其中我的作业被标记为尚未运行。

这种行为的可能原因是什么? 我还发现了类似 READY_BATTERY_LOW 的状态,是不是因为我的设备电量不足?但在进行测试时,该设备的电量为 58%。

此外,该设备已连接到 Jio 4g 网络。

dumpsys 日志包含在下面,任何人都可以有一些 cmets 来说明这个问题。 :)


(预定)com.mypackage.testapp/com.firebase.jobdispatcher.GooglePlayReceiver{u=0 tag="test-sync-job" trigger=window{start=300s,end=360s,earliest=-459s,latest =-399s} 要求=[NET_ANY] 属性=[RECURRING] 计划=-759s last_run=N/A jid=N/A 状态=READY_BATTERY_LOW 重试=0 client_lib=FIREBASE_JOB_DISPATCHER-1}

尚未运行。


提前致谢:)

【问题讨论】:

    标签: android 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 将确定已制作的 Job 目前已准备好执行。

    需要安排约束条件,牢记执行所制定活动的最终目标。当然,它是未填充的,这意味着在启动 JobTrigger 时 Job 将继续运行。

    RetryStrategy 负责处理令人失望的情况。默认使用指数退避过程。

    生命周期,表示应该按计划进行的活动的季节。

    默认是保持作业计划直到下一次启动。

    包装是为客户提供的附加物品。这是一个任意参数。

    一个布尔值表示作业是否应该重新散列。默认值为 false,这意味着计划的 Job 将只执行一次。

    一个布尔值显示预订的 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)- 当工作被卸载到另一个字符串时,它应该被明确地调用。

    【讨论】:

      猜你喜欢
      • 2016-10-10
      • 2017-11-08
      • 2016-11-15
      • 2017-06-22
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 1970-01-01
      相关资源
      最近更新 更多