2017-01-03 1 views
2

Я создал статические методы для операции для вызова jobcheduler Jobdispatcher не отправляет эту работу, я думаю. Пожалуйста помоги.Firebase Job Dispatcher не запускает класс сервиса

Методы в 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.

+0

Вы не называете 'AsyncTask.execute()'. Вам также нужно вызвать 'jobFinished', когда ваша' AsyncTask' будет закончена. – Oleksandr

ответ

3

Если у вас очень жесткое ограничение (то есть начальное задание точно через несколько минут или секунд), возможно, это хорошая идея реализовать это с помощью AlarmManager, потому что у JobDispatcher нет гарантии, что ваша задача будет работать в указанное время, он может начать работать через несколько часов.
В режиме API 21+ Doze также учитывается время, в которое будет выполняться ваша задача.
Если вы хотите действительно строгое планирование - используйте AlarmManager.setAndAllowWhileIdle.

+0

Где находится информация о 'несколько часов спустя'? https://github.com/firebase/firebase-jobdispatcher-android/issues/83 это говорит о 50 мс в минуту. – Serge

Смежные вопросы