2017-01-03 12 views
2

ジョブスケジューラを呼び出すアクティビティに静的メソッドを作成しました 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()'を呼び出しません。また、 'AsyncTask'が終了したときに' jobFinished'を呼び出す必要があります。 – Oleksandr

答えて

3

非常に厳しい制約がある場合(つまり、数分または数秒後にジョブを開始する場合)、JobDispatcherの保証がないため、指定した時間にタスクが機能するため、AlarmManagerを使用して実装することをお勧めします。それは数時間後に動作する可能性があります。
API 21+ Dozeモードでは、タスクが実行される時間を決定する要因にもなります。
本当に厳格なスケジュールを作成する場合は、AlarmManager.setAndAllowWhileIdleを使用します。

+0

「数時間後」の情報はどこですか? https://github.com/firebase/firebase-jobdispatcher-android/issues/83これは約50ms〜1分です。 – Serge

関連する問題