Vorrei utilizzare il nuovo JobScheduler di Androids nella mia app, ma al momento non so come passare il mio oggetto che contiene i dati (array byte
) che dovrebbe essere inviato via rete da un lavoro. Ho cercato una risposta ma finora non ho trovato nessuno di cui abbia paura.JobScheduling Android - Devo passare un oggetto al mio lavoro ma come?
Ho un 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);
}
}
}
... sono la costruzione di un lavoro come questo:
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 (di lavoro);
... e sto pianificazione del processo:
public void addJobInBackground(final JobInfo job) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(job);
}
Sooo ... non riesco a chiamare qualsiasi metodo di MyJob direttamente, giusto? Poi ho pensato che avrei potuto usare .setExtras(bundle)
per passare il mio oggetto al lavoro, ma come ho scoperto puoi usare solo uno PersistableBundle
che non accetta un oggetto serializzato come Bundle. L'impostazione di chiavi e valori non funziona, perché è possibile inserire solo booleans, ints, strings
, ecc. Ma non byte[]
, che è ciò di cui ho bisogno.
Qualcuno ha qualche idea? Sono abbastanza bloccato
Grazie in anticipo, a-m
PS: Siamo spiacenti, se probabilmente non ha utilizzato a destra codice-Tag.
Questo non è legato specificamente a scomparsa oggetti a 'JobInfo'. Si tratta di utilizzare un 'Intento' per passare oggetti tra due qualsiasi componenti di Android, ** le opzioni disponibili sono state discusse in dettaglio in [questa domanda] (https://stackoverflow.com/q/2139134/2666212) **. – Mike