いいえ私はJobSchedulerを使用してデータベースとデータを同期しています。 Jobschedulerで、測定していないネットワークなどのジョブを実行するための要件を設定できることはわかっていますが、問題はJobschedulerがインターネットが動作しているかどうかを確認することではありません。私は1つの仕事を持っています。それはいくつかの仕事を持っています。私はインターネットがあるかどうかをチェックするこの非同期タスクを作成しました。 httpレスポンス(StatusCode)が200でないかどうかを確認したい。直ちに仕事をやめて、もう一度やり直したい。インターネットが機能していない場合は、ジョブを続行する必要はありません。非同期タスクが完了した後、次のタスクが実行を開始するため、直ちにジョブを停止して再スケジュールする方法を理解できません。Android JobSchedulerは最初にインターネットの動作を確認してから別のタスクを実行する必要があります。
ここにここに私の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, "ConnectCheck finsished ------------------------");
}
}
「私はすぐにジョブを停止し、再スケジュールする方法を見つけ出すカント」 - 呼び出し 'jobFinished()'。 'statusCode!= 200'の場合は、すでにそうしているようです。あなたのステータスコードが200ならば、あなたの実際の作業を行い、完了したら 'jobFinished()'を呼び出します。そして、この 'AsyncTask'を普通の' Thread'に変換し、 'onPostExecute()'を取り除きます。これは、あなたが必要としないか、ここのメインアプリケーションスレッドで作業をしたいからです。 – CommonsWare