我想在我的应用程序中使用 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(job);
...并且正在安排工作:
public void addJobInBackground(final JobInfo job) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(job);
}
Sooo ...我不能直接调用 MyJob 中的任何方法,对吧?然后我想我可以.setExtras(bundle)
用来将我的对象传递给工作,但是我发现你只能使用一个PersistableBundle
不会像 Bundle 这样的序列化对象。设置键和值是行不通的,因为你只能 putbooleans, ints, strings
等,但不能byte[]
,这正是我所需要的。
有人知道吗?我很困惑。
提前谢谢,我
PS:对不起,如果我可能没有使用正确的代码标签。