web-dev-qa-db-fra.com

Comment vérifier que JobService fonctionne ou non dans Android?

J'utilise JobService dans mon projet. Ça marche bien. Mais parfois, le service s'arrêtait. Il ne redémarre pas à nouveau. Pour que j'essaie de stratifier le JobService s'il n'est pas en cours d'exécution. Mais je ne sais pas comment vérifier que JobService fonctionne déjà ou non. Veuillez me donner une idée de la façon de vérifier si JobService fonctionne ou non.

Ma classe de service d'emploi:

@RequiresApi(api = Build.VERSION_CODES.Lollipop)
public class JobService extends Android.app.job.JobService {
    @Override
    public boolean onStartJob(JobParameters params) {
        if (NetworkHandler.getInstance().isNetworkAvailable()) {
            TaskHandler.getInstance().getTaskListFromServer(PreferenceManagerForPlannedRoute.getInstance().getLastSyncTime(), PreferenceManagerForPlannedRoute.getInstance().getInProgressMoveTask());
            NotificationUtils.getInstance().CreateNotification();
            Logger.d("Scheduler", "Working!!");
        } else {
            Logger.d("Network", "not available");
        }
        return false;
    }


    @Override
    public boolean onStopJob(JobParameters params) {
        Logger.d("onStopJob", "Stopped");
        return true;
    }
}

Ma classe util:

public class JobSchedulerUtils {

    @RequiresApi(api = Build.VERSION_CODES.Lollipop)
    public static void scheduleJob(Context context) {
        ComponentName serviceComponent = new ComponentName(context, JobService.class);
        JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
        builder.setRequiresDeviceIdle(false);
        builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
        builder.setPeriodic(5000);
        builder.setPersisted(true);           
        JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
        jobScheduler.schedule(builder.build());
    }
}

Commencer:

synchronized public void startAlarmManager() {
        if(Build.VERSION.SDK_INT>=21) {
            JobSchedulerUtils.scheduleJob(Application.getInstance().getApplicationContext());
        }else {
            Intent myIntent = new Intent(Application.getInstance(), AlarmManagerForPlannedRoute.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(Application.getInstance(), 0, myIntent, 0);
            AlarmManager alarmManager = (AlarmManager) Application.getInstance().getSystemService(Context.ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis(), Constants.TIME_DELAY_FOR_TASK_LIST_SERVICE_CALL_IN_SECONDS * 1000, pendingIntent);
        }
    }

Arrêter:

 synchronized private void stopAlarmManager(Activity activity) {
        if(Build.VERSION.SDK_INT>=21){
            JobScheduler jobScheduler = (JobScheduler) Application.getInstance().getApplicationContext().getSystemService(Context.JOB_SCHEDULER_SERVICE);
            jobScheduler.cancelAll();
        }else {
            Intent myIntent = new Intent(activity, AlarmManagerForPlannedRoute.class);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, 0, myIntent, 0);
            AlarmManager alarmManager = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
            alarmManager.cancel(pendingIntent);
        }
    }
12
New Developer

J'ai la solution.

public static boolean isJobServiceOn( Context context ) {
    JobScheduler scheduler = (JobScheduler) context.getSystemService( Context.JOB_SCHEDULER_SERVICE ) ;

    boolean hasBeenScheduled = false ;

    for ( JobInfo jobInfo : scheduler.getAllPendingJobs() ) {
        if ( jobInfo.getId() == JOB_ID ) {
            hasBeenScheduled = true ;
            break ;
        }
    }

    return hasBeenScheduled ;
}

En utilisant cette méthode, nous pouvons vérifier que jobService fonctionne ou non.

26
New Developer