Android JobScheduler需要先检查是否正常工作,然后再运行其他任务

亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述Android JobScheduler需要先检查是否正常工作,然后再运行其他任务相关的知识,希望能为你提供帮助。
好的我正在使用JobScheduler与数据库同步数据。我知道你可以在JobScheduler中设置要求来运行像未计量网络等工作,但问题是Jobscheduler没有检查互联网是否正常工作它只检查你是否连接到网络。我有一个周期性的Job,有几个任务。我创建了这个异步任务,检查是否有互联网。我想检查http响应(StatusCode)是否不等于200。我想立即停止工作并重新安排工作。因为如果互联网不工作,我不需要继续运行这项工作。我无法弄清楚如何立即停止作业并重新安排,因为在异步任务完成后,下一个任务开始执行。
这是我的OnStartJob和OnStopJob

@Override public boolean onStartJob(JobParameters jobParameters) { Log.d(TAG, "onStartJob"); new ConnectCheck(getApplicationContext(), this, jobParameters).execute(); getRetrofitObject(); myLocation(); new MyToken(getApplicationContext(), this, jobParameters).execute(); Document newMemo = new Document(); new MyWorker(getApplicationContext(), this, jobParameters).execute(newMemo); return true; }@Override public boolean onStopJob(JobParameters jobParameters) { Log.d(TAG, "onStopJob"); return true; }

这是我的异步任务
private static class ConnectCheck extends AsyncTask< Void, Void, Boolean> { private final Context mContext; private final MyJobService mJobService; private final JobParameters mJobParams; public ConnectCheck(Context context, MyJobService myJobService, JobParameters jobParameters) { mContext = context; mJobService = myJobService; mJobParams = jobParameters; }@Override protected Boolean doInBackground(Void... voids) { Log.d(TAG, "Connect Check start!"); int statusCode = 0; URL url = null; try { url = new URL("http://google.com/"); } catch (MalformedURLException e) { e.printStackTrace(); } HttpURLConnection http = null; try { http = (HttpURLConnection)url.openConnection(); } catch (IOException e) { e.printStackTrace(); } try { statusCode = http.getResponseCode(); Log.d(TAG, "" +statusCode); } catch (IOException e) { e.printStackTrace(); }if(statusCode!=200) { // reschedule a jobscheduler Log.d(TAG, "reschedule job"); mJobService.jobFinished(mJobParams, true); }return false; }@Override public void onPostExecute(Boolean reschedule) { if (reschedule) { mJobService.jobFinished(mJobParams, true); } else { mJobService.jobFinished(mJobParams, false); } Log.d(TAG, "ConnectCheckfinsished ------------------------"); } }

答案你在做什么几乎是在正确的道路上。
【Android JobScheduler需要先检查是否正常工作,然后再运行其他任务】请记住,互联网无法正常工作,连接将超时并抛出ioexception。如果是这样,只需将你的重新安排布尔值设置为true,你的代码就应该调用
jobFinished(yourparams,rescheduletrue)


    推荐阅读