アプリで Android の新しい JobScheduler を使用したいのですがbyte
、ジョブによってネットワーク経由で送信されるデータ (配列) を含むオブジェクトを渡す方法がわかりません。私は答えを探しましたが、これまでのところ何も見つかりませんでした。
JobService があります。
public class MyJob extends JobService {
@Override
public boolean onStartJob(JobParameters jobParameters) {
new JobTask(this).execute(jobParameters);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
return false;
}
private static class JobTask extends AsyncTask<JobParameters, Void, JobParameters> {
private final JobService jobService;
public JobTask(JobService jobService) {
this.jobService = jobService;
}
@Override
protected JobParameters doInBackground(JobParameters... params) {
AnotherClass.post(myObject); // where does myObject come from?
return params[0];
}
@Override
protected void onPostExecute(JobParameters jobParameters) {
jobService.jobFinished(jobParameters, false);
}
}
}
...次のようなジョブを構築しています:
PersistableBundle bundle = new PersistableBundle();
JobInfo job = new JobInfo.Builder(jobID, new ComponentName(context, AshServiceJob.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
.setPersisted(true)
.setExtras(bundle) // could bundle somehow contain myObject?
.build();
OtherClass.addJobInBackground(ジョブ);
...そして、ジョブをスケジュールしています:
public void addJobInBackground(final JobInfo job) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(job);
}
すっごい… MyJob のメソッドを直接呼び出すことはできませんよね?次に、オブジェクトをジョブに渡すために使用できると考えましたが、バンドルのようなシリアル化されたオブジェクトを取らない.setExtras(bundle)
a のみを使用できることがわかりました。キーと値の設定は機能しません。これは、などPersistableBundle
しか配置できず、必要なものではないためです。booleans, ints, strings
byte[]
誰にもアイデアはありますか?私はかなり立ち往生しています。
よろしくお願いします。
PS: 申し訳ありませんが、おそらく適切なコード タグを使用していない場合。