如何检查 JobService 是不是在 android 中运行?
Posted
技术标签:
【中文标题】如何检查 JobService 是不是在 android 中运行?【英文标题】:How to check JobService is running or not in android?如何检查 JobService 是否在 android 中运行? 【发布时间】:2018-03-14 14:17:44 【问题描述】:我在我的项目中使用 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);
【问题讨论】:
***.com/questions/600207/… @sparkss.. 我试过这个。它总是显示作业没有运行,即使作业运行成功.. 【参考方案1】:我得到了解决方案。
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是否在运行。
【讨论】:
@Alex.F 那么如何检查作业是否正在运行?请让我知道以改进我的代码和答案。 从 API 24 (Nougat) 你可以使用简单的scheduler.getPendingJob(JOB_ID) != null
@sosite.. 我想我使用的是相同的。对吧??
有什么方法可以检查 JobDispatcher 是否正在运行?
答案不正确!问题是关于跑步与否。作业可能已安排,但未运行。以上是关于如何检查 JobService 是不是在 android 中运行?的主要内容,如果未能解决你的问题,请参考以下文章
如何防止 JobService 使用的 AsyncTask 中的上下文泄漏