Ich versuche einen JobService zu erstellen. So sieht onStartJob() aus.Android jobScheduler wird nicht mit jobFinished (params, false) aufhören
@Override
public boolean onStartJob(JobParameters params) {
Log.d(TAG, "onStartJob");
Log.d(TAG, "Params= " + params.getJobId());
param = params;
jobFinished(params, false);
//startAsync();
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
Log.d(TAG, "onStopJob");
return false;
}
Hier ist der Code, der den Job starten soll.
public void startJobScheduler(){
Log.d(TAG, "inside startJobScheduler");
Activity activity = this.cordova.getActivity();
Context context = activity.getApplicationContext();
mJobScheduler = (JobScheduler)context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder job = new JobInfo.Builder(111, new ComponentName(context, JobSchedulerService.class));
job.setPeriodic(60000);
Log.d(TAG, "before mJobScheduler.schedule(job.build())");
if(mJobScheduler.schedule(job.build()) <= 0) {
Log.d(TAG, "job schedule failed");
}
Log.d(TAG, "333");
}
Ich kann es nicht stoppen. Es feuert nur alle 1-5 Minuten. Ich habe jobFinished (params, false) in onStartJob() eingegeben und die Aufgabe auskommentiert, um zu versuchen, sie sofort nach dem Start zu beenden, aber sie feuert weiter. Es scheint, dass jobFinished() etwas auslöst, da onDestroy() aufgerufen wird und mein Dienst zerstört wird, aber dann kommt ein anderer Job mit derselben ID und startet alles wieder.
Ich habe BIND_JOB_SERVICE im Manifest wie jedes Beispiel zeigt.
Irgendwelche Ideen auf warum jobFinished (params, false) scheint nicht das setPeriodic (60000) zu töten?
Tom's Antwort sollte die akzeptierte sein. Sie erstellen einen periodischen Job und verwenden ihn als One-Shot, was keinen Sinn ergibt, da es Möglichkeiten gibt, es richtig zu machen. Sie stornieren auch ALLE Jobs, die Sie möglicherweise geplant haben, nicht die, die Sie wollten. –