Standardowy sposób używania timerów w Javie za pośrednictwem java.util.Timer i java.util.TimerTask działa dobrze w systemie Android, ale należy pamiętać, że ta metoda tworzy nowy wątek.
Możesz rozważyć użycie bardzo wygodnej klasy Handler (android.os.Handler) i wysyłać komunikaty do programu obsługi za pośrednictwem sendMessageAtTime(android.os.Message, long)
lub sendMessageDelayed(android.os.Message, long)
. Po otrzymaniu wiadomości możesz uruchomić żądane zadania. Drugą opcją byłoby utworzenie obiektu Runnable i zaplanowanie go za pomocą funkcji Handler postAtTime(java.lang.Runnable, long)
lub postDelayed(java.lang.Runnable, long)
.
tak, można użyć timera javy , ale ponieważ pytanie dotyczy lepszego sposobu (dla telefonów komórkowych). Co jest wyjaśnione tutaj .
Ze względu na StackOverflow:
Ponieważ Timer tworzy nowy wątek, można go uznać za ciężki,
jeśli wszystko, czego potrzebujesz, to oddzwonienie podczas działania działania, Handler może być używany w połączeniu z
Runnable :
lub wiadomość
na marginesie, to podejście można zastosować, jeśli chcesz uruchomić fragment kodu w wątku interfejsu użytkownika z innego wątku.
Jeśli potrzebujesz oddzwonienia, nawet jeśli Twoja aktywność nie jest uruchomiona, możesz użyć AlarmManager
źródło
Jak widziałem, java.util.Timer jest najczęściej używany do implementacji timera.
W przypadku powtarzającego się zadania:
W przypadku pojedynczego uruchomienia zadania:
zadanie będące metodą do wykonania
po czasie do wykonania początkowego
( interwał czas na powtórzenie wykonania)
źródło
task
może być instancją Twojej klasy, która dziedziczy po java.util.TimerTask i nadpisujevoid run()
.Mam nadzieję, że ta jest pomocna i może wymagać mniej wysiłku w implementacji, klasy Android CountDownTimer
na przykład
źródło
Prawdopodobnie
Timerconcept
lub
Metoda 2 ::
Zaprogramuj minutnik
Dodaj nową zmienną int o nazwie time. Ustaw na 0. Dodaj następujący kod do funkcji onCreate w pliku MainActivity.java.
Przejdź do metody uruchamiania i dodaj następujący kod.
źródło
To jest sytuacyjne.
Dokumentacja systemu Android sugeruje, że powinieneś użyć AlarmManagera do zarejestrowania intencji, która zostanie uruchomiona w określonym czasie, jeśli Twoja aplikacja może nie być uruchomiona.
W przeciwnym razie powinieneś użyć Handler.
źródło
Nasza pierwsza klasa
Nasza 2 klasa
źródło
Jestem początkującym użytkownikiem Androida, ale oto klasa timera, którą utworzyłem na podstawie powyższych odpowiedzi. Działa w mojej aplikacji, ale wszelkie sugestie są mile widziane.
Przykład użycia:
źródło
Używam programu obsługi i można go uruchomić, aby utworzyć licznik czasu. Otaczam to w abstrakcyjną klasę. Po prostu wyprowadź / zaimplementuj to i jesteś gotowy:
Zauważ, że
handler.postDelayed
jest wywoływana przed kodem, który ma zostać wykonany - spowoduje to, że licznik czasu będzie bardziej zamknięty zgodnie z oczekiwaniami. Jednak w przypadkach, gdy licznik czasu działa zbyt często, a zadanie (onTimer()
) jest długie - mogą się pokrywać. Jeśli chcesz rozpocząć liczenieintervalMS
po wykonaniu zadania, przesuńonTimer()
połączenie o linię powyżej.źródło
Uważam, że sposobem na to na Androidzie jest to, że do działania potrzebna jest usługa w tle. W tej aplikacji działającej w tle utwórz licznik czasu. Gdy stoper „tyka” (ustaw interwał czasu oczekiwania), uruchom aktywność, którą chcesz rozpocząć.
http://developer.android.com/guide/topics/fundamentals.html (<- ten artykuł wyjaśnia związek między działaniami, usługami, intencjami i innymi podstawowymi podstawami programowania Androida)
źródło
Kiedyś używałem (
Timer
,TimerTask
), a takżeHandler
okresowo uruchamiałem (czasochłonne) zadania. Teraz przerzuciłem całość na RxJava. RxJava zapewniaObservable.timer
prostszą, mniej podatną na błędy i bezproblemową obsługę .źródło
Do operacji synchronizacji należy używać Handler .
Jeśli potrzebujesz uruchomić usługę w tle, najlepszym rozwiązaniem jest AlarmManager.
źródło
ten przykład uruchamia jednostkę czasową zniszczoną w Kotlinie
Anuluj zadanie czasowe w onDestroy ()
źródło