Używam, handler.postDelayed()
aby utworzyć okres oczekiwania przed kolejnym etapem mojej aplikacji. Podczas okresu oczekiwania wyświetlam okno dialogowe z paskiem postępu i przyciskiem Anuluj .
Mój problem polega na tym, że nie mogę znaleźć sposobu na anulowanie zadania postDelayed przed upływem czasu.
Odpowiedzi:
Robię to, aby opublikować opóźnione uruchomienie:
I to, aby go usunąć:
myHandler.removeCallbacks(myRunnable);
źródło
W przypadku, gdy masz wiele wewnętrznych / anonimowych plików runnables przekazanych do tego samego modułu obsługi i chcesz anulować wszystkie przy tym samym zdarzeniu
handler.removeCallbacksAndMessages(null);
źródło
removeCallbacks(callback)
aby usunąć określone oddzwonienieInnym sposobem jest obsłużenie samego Runnable:
źródło
r
w tym przypadku), co oznacza, że mogę użyćmyHandler.removeCallbacks(r);
. Jeśli Runnable jest anonimowy, flaga będzie członkiem klasy zamykającej, co oznacza, że potrzebuję odwołania do tego obiektu, aby zmienić flagę, co oznacza, że i tak będę musiał jeszcze miećr
, co oznacza, że mogęmyHandler.removeCallbacks(r);
. A jeśli to robię,myHandler.removeCallbacks(r);
taka flaga wcale nie jest konieczna. Czy coś brakuje?Oto klasa zapewniająca metodę anulowania opóźnionego działania
źródło
Zadziałało dla mnie, gdy wywołałem CancelCallBacks (this) wewnątrz postu z opóźnieniem uruchomienia przez przekazanie go za pomocą wartości logicznej
źródło
Mam nadzieję, że ta pomoc gist https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4
MainActivity jako Screen Launcher z funkcją handlera i funkcją runnable, Runnable run to login page lub feed page with preferencje podstawowe użytkownik logujący z firebase.
źródło