Firebase Job Dispatcher 不会触发服务类
Posted
技术标签:
【中文标题】Firebase Job Dispatcher 不会触发服务类【英文标题】:Firebase Job Dispatcher doesn't trigger the service class 【发布时间】:2017-05-17 13:37:32 【问题描述】:我在一个活动上创建了静态方法来调用作业调度程序 我猜,Jobdispatcher 不会分派工作。请帮忙。
Add.java 类中的方法
public void add_details(String namel,String descl,String timel)
add_job(timel);
synchronized public void add_job(String time)
Driver driver = new GooglePlayDriver(Add.this);
FirebaseJobDispatcher firebaseJobDispatcher = new FirebaseJobDispatcher(driver);
Job job = firebaseJobDispatcher.newJobBuilder()
.setService(Addition_job.class)
.setTag(JOB_TAG)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(5,30))
.build();
firebaseJobDispatcher.mustSchedule(job);
Addition_job.class
public class Addition_job extends JobService
private AsyncTask Task;
@Override
public boolean onStartJob(JobParameters job)
Task=new AsyncTask()
@Override
protected Object doInBackground(Object[] params)
Context context=Addition_job.this;
Decision.notify_user(context);
return null;
;
return true;
@Override
public boolean onStopJob(JobParameters job)
if (Task != null) Task.cancel(true);
return true;
Decision.java notify_user 方法
public static void notify_user(Context context)
if(context!=null)
Toast.makeText(context,"notified:",Toast.LENGTH_SHORT).show();
我已在清单中使用export=false
和action_Execute
指定了服务。
【问题讨论】:
你不要打电话给AsyncTask.execute()
。当您的AsyncTask
完成时,您还需要致电jobFinished
。
【参考方案1】:
如果您有非常严格的限制(即在几分钟或几秒钟后开始工作),那么使用 AlarmManager 实现这一点可能是个好主意,因为 JobDispatcher 不能保证您的任务将在指定的时间工作,它可能会在几个小时后开始工作。 在 API 21+ 上,打盹模式也将成为决定任务执行时间的因素。 如果您想要真正严格的调度 - 使用 AlarmManager.setAndAllowWhileIdle。
【讨论】:
关于“几小时后”的信息从何而来? github.com/firebase/firebase-jobdispatcher-android/issues/83 这表示大约每分钟 50 毫秒。以上是关于Firebase Job Dispatcher 不会触发服务类的主要内容,如果未能解决你的问题,请参考以下文章