Chciałbym użyć Androids nowy JobScheduler w mojej aplikacji, ale w tej chwili nie wiem, jak przekazać mój obiekt, który zawiera dane (tablica byte
), które powinny być wysłane przez sieć przez zadanie. Szukałem odpowiedzi, ale do tej pory nie znalazłem. Obawiam się.Android JobScheduling - muszę przekazać obiekt do mojej pracy, ale jak?
Mam 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);
}
}
}
... buduję pracę tak:
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 (praca);
... i jestem planowania pracy:
public void addJobInBackground(final JobInfo job) {
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(job);
}
taaak ... nie mogę nazwać żadnych metod w MyJob bezpośrednio, prawda? Wtedy pomyślałem, że mogę użyć .setExtras(bundle)
, aby przekazać mój obiekt do pracy, ale jak się dowiedziałem, możesz użyć tylko PersistableBundle
, który nie bierze serializowanego obiektu, takiego jak Pakiet. Ustawianie klawiszy i wartości nie działa, ponieważ możesz tylko wstawiać booleans, ints, strings
itd., Ale nie byte[]
, czego właśnie potrzebuję.
Czy ktoś ma pomysł? Utknąłem.
Dzięki z góry, a-m
PS: Przepraszam, czy ja prawdopodobnie nie użyć prawego Tagi kodu.
To nie jest związany konkretnie do przejścia obiekty do 'JobInfo'. Chodzi o użycie 'Intent' do przekazywania obiektów pomiędzy dowolnymi dwoma elementami systemu Android, ** dostępne opcje zostały szczegółowo omówione w [to pytanie] (https://stackoverflow.com/q/2139134/2666212) **. – Mike