gpt4 book ai didi

java - 如何在android中检查JobService是否正在运行?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:02 25 4
gpt4 key购买 nike

我在我的项目中使用 JobService。它运作良好。但有时服务会停止。它不会重新启动。因此,如果 JobService 未运行,我将尝试对其进行分层。但我不知道如何检查 JobService 是否已经在运行。请告诉我如何检查 JobService 是否正在运行。

我的工作服务类:

@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;
}
}

我的实用程序类:

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());
}
}

开始:

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);
}
}

停止:

 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);
}
}

最佳答案

我得到了解决方案。

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 ;
}

使用此方法我们可以检查 jobService 是否正在运行。

关于java - 如何在android中检查JobService是否正在运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46543658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com