Ok 데이터를 데이터베이스와 동기화하는 데 JobScheduler를 사용하고 있습니다. Jobscheduler에서 측정되지 않은 네트워크 등의 작업을 수행 할 수있는 요구 사항을 설정할 수 있지만 Jobscheduler는 인터넷이 작동하는지 점검하지 않습니다. 네트워크에 연결되어 있는지 확인합니다. 나는 여러 가지 일을하는주기적인 1 일을 가지고있다. 인터넷이 있는지 확인하는 비동기 작업을 만들었습니다. http 응답 (StatusCode)이 200과 같지 않은지 확인하고 싶습니다. 즉시 그 일을 멈추고 다시 일정을 잡고 싶습니다. 왜냐하면 인터넷이 작동하지 않는다면 그 일을 계속할 필요가 없기 때문입니다. 비동기 작업이 끝나면 다음 작업이 시작되기 때문에 즉시 작업을 중지하고 일정을 변경하는 방법을 알 수 없습니다.Android JobScheduler가 먼저 interrnet 작업을 확인한 다음 다른 작업을 실행해야합니다.
여기
@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, "ConnectCheck finsished ------------------------");
}
}
"작업을 즉시 중지하고 일정을 변경하는 방법을 알 수 없습니다."- jobFinished()를 호출하십시오. 'statusCode! = 200'이라면 이미 그렇게하고있는 것 같습니다. 상태 코드가 200이면 실제 작업을 수행하고 작업이 완료되면'jobFinished()'를 호출하십시오. 그런 다음,이 'AsyncTask'를 일반'Thread'로 변환하여, onPostExecute()를 제거하십시오. 여기서는 메인 애플리케이션 스레드에서 작업 할 필요가 없거나 작업하고 싶어합니다. – CommonsWare