【问题标题】:Firebase Job Dispatcher doesn't trigger the service classFirebase Job Dispatcher 不会触发服务类
【发布时间】: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=falseaction_Execute 指定了服务。

【问题讨论】:

  • 你不要打电话给AsyncTask.execute()。当您的AsyncTask 完成时,您还需要致电jobFinished

标签: android firebase firebase-job-dispatcher


【解决方案1】:

如果您有非常严格的限制(即在几分钟或几秒钟后开始工作),那么使用 AlarmManager 实现这一点可能是个好主意,因为 JobDispatcher 不能保证您的任务将在指定的时间工作,它可能会在几个小时后开始工作。
在 API 21+ 上,打盹模式也将成为决定任务执行时间的因素。
如果您想要真正严格的调度 - 使用 AlarmManager.setAndAllowWhileIdle。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
  • 1970-01-01
相关资源
最近更新 更多