亦余心之所善兮,虽九死其犹未悔。这篇文章主要讲述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)
推荐阅读
- 无法解析Android中的方法'execute()'
- 通过在Android中实现Proguard,使用JDBC在Asynctask中崩溃
- Android Studio - 对象构造函数中的NetworkOnMainThreadException
- 无法将值传递给Android中的AsyncTask
- AsyncTask Android方法的技术差异
- Android AsyncTask问题(连接到Web服务)
- Android(Kotlin) - 如何等待异步任务完成()
- E / AndroidRuntime(致命异常:Android的AsyncTask#1 ERROR)
- Android AsyncTask无法运行