9

Chciałbym wiedzieć, czy można użyć Firebase jobdispatcher, aby zaplanować trafienie adresu URL i uzyskać odpowiedź w celu zaktualizowania bazy danych. Chciałbym, aby uruchamiał się raz dziennie w nocy. Czy ktoś wie, czy to jest możliwe?Android - Firebase jobdispatcher

Nie mogę znaleźć żadnego dobrego przykładu robienia tego. Czytałem już dokumentację Androida i https://github.com/firebase/firebase-jobdispatcher-android#user-content-firebase-jobdispatcher-.

muszę korzystać Firebase jobdispatcher bo jestem kierowania API 16.

góry dziękuję.

UPDATE

To, co zrobiłem, aby zaplanować je raz dziennie.

final int periodicity = (int) TimeUnit.HOURS.toSeconds(24); 
final int toleranceInterval = (int) TimeUnit.HOURS.toSeconds(1); 

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); 
Job job = dispatcher.newJobBuilder() 
     .setService(UpdateTVJobService.class) 
     .setTag(JOB_TAG) 
     .setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval)) 
     .setLifetime(Lifetime.FOREVER) 
     .setRecurring(true) 
     .setReplaceCurrent(true) 
     .build(); 

int result = dispatcher.schedule(job); 

if (result != FirebaseJobDispatcher.SCHEDULE_RESULT_SUCCESS) { 
    Log.d("JOB_TAG", "ERROR ON SCHEDULE"); 
} 

Odpowiedz

10

Możesz zaplanować powtarzające się zadania za pomocą Firebase JobDispatcher. Zgodnie z wymaganiami musisz utworzyć usługę rozszerzającą JobService, która uzyska odpowiedź z adresu URL i zaktualizuje bazę danych. Następnie możesz zaplanować tę usługę za pomocą Firebase JobDispatcher. W executionWindow musisz określić najwcześniejszy i najnowszy czas, w którym zadanie powinno działać w idealnych warunkach.

Jeśli chcesz zaplanować zadanie po każdych 24 godzinach, możesz użyć okna wykonawczego (60 * 60 * 24,60 * 60 * 24 + 60). Jeśli chcesz, aby to działało co noc, musisz zrobić pewne, że początkowo jest planowane w nocy. Aby początkowo użyć AlarmManager, aby był uruchamiany w nocy (tylko raz), gdy aplikacja jest zainstalowana i zaplanować powtarzające się zadanie za pomocą dyspozytor pracy LUB innym sposobem jest to oparte na różnicy od teraz i pożądanej czas wykonania można zaplanować nierekurencyjne zadanie za pomocą jobdispatcher, który będzie działać w nocy i wewnątrz tej usługi pracy można zaplanować powtarzające się pracy przy użyciu dyspozytora pracy.

ExecutionWindow określa przybliżony czas. Nie gwarantuje się, że uruchomi się w danym oknie. W razie pomyłki w oknie zadanie zostanie uruchomione najwcześniej w późniejszym czasie w idealnych warunkach. Dla powtarzających się zadań po zakończeniu zadania następne zadanie obliczy czas wykonania okna od ostatniego zlecenia czasowego.

Job myJob = dispatcher.newJobBuilder() 
        .setTag("my-unique-tag") 
        .setRecurring(true) 
        .setLifetime(Lifetime.FOREVER) 
        .setService(MyJobService.class) 
        .setTrigger(Trigger.executionWindow(60*60*24,60*60*24+60)) 
        .setReplaceCurrent(false) 
        .setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL) 
        .setConstraints(Constraint.ON_ANY_NETWORK) 
        .setExtras(myExtrasBundle) 
        .build(); 

dispatcher.mustSchedule(myJob); 
+0

Dzięki, zrobiłem coś podobnego. Zaktualizuję swój wpis dla innych osób. – Sol

+0

@Bhuvnesh Varma: trzeba zapytać o okno wyzwolenia? –

+0

@ young_08 proszę pytać, jakie jest twoje zapytanie? –

1

Można zaplanować cykliczne pracę opowiadając Job.Builder stworzyć powtarzające pracę z Wyzwalanie który ma okno wykonanie zgodnie ze swoimi potrzebami.

+1

Chcę zaplanować zadanie co 4 minuty, co będzie spust – blackHawk

+0

@Doug Chcę przetestować ten planującego uruchomić moją pracę po każdych 60 sekund. Oto mój spust, ale nie sądzę, żeby działał co 60 sekund. .setTrigger (Trigger.executionWindow (60, 60 + 60)) –