Tworzę aplikację na Androida 2.3.3 i muszę uruchamiać metodę co X sekund .
W iOS mam NSTimer , ale na Androidzie nie wiem, czego użyć.
Ktoś polecił mi Handler ; inny polecam AlarmManager ale nie wiem, która metoda lepiej pasuje do NSTimer .
Oto kod, który chcę zaimplementować w systemie Android:
timer2 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
target:self
selector:@selector(loopTask)
userInfo:nil
repeats:YES
];
timer1 = [
NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
target:self
selector:@selector(isFree)
userInfo:nil
repeats:YES
];
Potrzebuję czegoś, co działa jak NSTimer .
Co mi polecasz?
Odpowiedzi:
To naprawdę zależy od tego, jak długo trzeba będzie uruchomić tę funkcję.
Jeśli jest => 10 minut → wybrałbym Menedżera alarmów.
A następnie odbierasz te transmisje za pośrednictwem odbiornika. Należy pamiętać, że będzie to musiało zostać zarejestrowane w manifeście aplikacji lub za pomocą
context.registerReceiver(receiver,filter);
metody. Więcej informacji na temat odbiorników transmisji można znaleźć w oficjalnych dokumentach. Odbiornik transmisji .Jeśli to = <10 minut → pójdę z Handlerem.
źródło
h.removeCallbacks(this);
, w przeciwnym razie musisz zachować odniesienie do runnable, aby móc go usunąć. Jeśli druga strona jest pożądana, zamieszczona tutaj metoda może nie być najlepszą trasą.Używaj timera co sekundę ...
źródło
Możesz spróbować tego kodu, aby wywoływać program obsługi co 15 sekund za pomocą onResume () i zatrzymywać go, gdy aktywność nie jest widoczna, za pomocą onPause ().
źródło
Jeśli znasz RxJava, możesz użyć Observable.interval (), co jest całkiem fajne.
Wadą tego jest to, że musisz zaprojektować architekturę sondowania danych w inny sposób. Jednak sposób programowania reaktywnego ma wiele zalet:
Dzięki RxAndroid możesz obsługiwać wątki w zaledwie 2 wierszach kodu.
Proszę sprawdź RxJava. Ma dużą krzywą uczenia się, ale sprawi, że obsługa wywołań asynchronicznych w systemie Android będzie o wiele łatwiejsza i czystsza.
źródło
Dzięki Kotlinowi możemy teraz stworzyć dla tego funkcję ogólną!
Aby użyć, po prostu wykonaj:
źródło
źródło
Tutaj użyłem wątku w onCreate () wielokrotnie, licznik czasu nie pozwala na wszystko w niektórych przypadkach Wątek jest rozwiązaniem
W razie potrzeby można go zatrzymać
źródło
Tutaj może pomocna odpowiedź na Twój problem z użyciem Rx Java i Rx Android .
źródło