Firebase Job Dispatcher 不触发服务 class
Firebase Job Dispatcher doesn't trigger the service class
我在 activity 上创建了静态方法来调用 jobscheduler
我猜 Jobdispatcher 不会派遣工作。请帮忙。
class中的方法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
notifiy_user 方法
public static void notify_user(Context context)
{
if(context!=null)
Toast.makeText(context,"notified:",Toast.LENGTH_SHORT).show();
}
我在清单中用 export=false
和 action_Execute
指定了服务。
如果你有非常严格的约束(即在几分钟或几秒后开始工作)那么用 AlarmManager 实现它可能是个好主意,因为 JobDispatcher 不能保证你的任务会在指定的时间工作,它可能会在几个小时后开始工作。
API 21+ Doze 模式也将成为决定任务执行时间的因素。
如果你想要真正严格的调度 - 使用 AlarmManager.setAndAllowWhileIdle.
我在 activity 上创建了静态方法来调用 jobscheduler 我猜 Jobdispatcher 不会派遣工作。请帮忙。
class中的方法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 notifiy_user 方法
public static void notify_user(Context context)
{
if(context!=null)
Toast.makeText(context,"notified:",Toast.LENGTH_SHORT).show();
}
我在清单中用 export=false
和 action_Execute
指定了服务。
如果你有非常严格的约束(即在几分钟或几秒后开始工作)那么用 AlarmManager 实现它可能是个好主意,因为 JobDispatcher 不能保证你的任务会在指定的时间工作,它可能会在几个小时后开始工作。
API 21+ Doze 模式也将成为决定任务执行时间的因素。
如果你想要真正严格的调度 - 使用 AlarmManager.setAndAllowWhileIdle.