Timery
Ta strona została przetłumaczona przez PageTurner AI (beta). Nie jest oficjalnie zatwierdzona przez projekt. Znalazłeś błąd? Zgłoś problem →
Timery są ważną częścią aplikacji, a React Native implementuje timery przeglądarkowe.
Timery
-
setTimeouticlearTimeout -
setIntervaliclearInterval -
setImmediateiclearImmediate -
requestAnimationFrameicancelAnimationFrame
requestAnimationFrame(fn) różni się od setTimeout(fn, 0) - pierwsze wywołuje się po wyrenderowaniu wszystkich klatek, podczas gdy drugie wywołuje się tak szybko, jak to możliwe (ponad 1000 razy na sekundę na iPhone 5S).
setImmediate wykonuje się na końcu aktualnego bloku JavaScript, tuż przed wysłaniem zbatchowanej odpowiedzi do natywnej części. Uwaga: jeśli wywołasz setImmediate wewnątrz callbacka setImmediate, wykona się natychmiast bez powrotu do warstwy natywnej.
Implementacja Promise używa setImmediate do obsługi asynchroniczności.
Podczas debugowania na Androidzie, jeśli występuje rozbieżność czasu między debugerem a urządzeniem, animacje, zachowania zdarzeń itp. mogą działać nieprawidłowo lub dawać niedokładne wyniki.
Popraw to wykonując adb shell "date `date +%m%d%H%M%Y.%S%3N`" na maszynie debugującej. Wymagany jest dostęp root na prawdziwym urządzeniu.
InteractionManager
Zachowanie InteractionManager zostało zmienione na identyczne z setImmediate, którego należy teraz używać.
Jednym z powodów płynności dobrze zbudowanych aplikacji natywnych jest unikanie kosztownych operacji podczas interakcji i animacji. W React Native mamy obecnie ograniczenie jednego wątku wykonawczego JS, ale możesz użyć InteractionManager aby zaplanować długotrwałe zadania po zakończeniu interakcji/animacji.
Aplikacje mogą planować zadania do wykonania po interakcjach za pomocą:
InteractionManager.runAfterInteractions(() => {
// ...long-running synchronous task...
});
Porównaj z innymi metodami planowania:
-
requestAnimationFrame(): dla kodu animującego widok w czasie.
-
setImmediate/setTimeout/setInterval(): wykonaj kod później, uwaga: może opóźniać animacje.
-
runAfterInteractions(): wykonaj kod później bez opóźniania aktywnych animacji.
System obsługi dotknięć uznaje jeden lub więcej aktywnych dotknięć za "interakcję" i opóźni wywołania runAfterInteractions() do czasu zakończenia lub anulowania wszystkich dotknięć.
InteractionManager pozwala aplikacjom rejestrować animacje poprzez tworzenie "uchwytu" interakcji przy starcie animacji i jego zwalnianie po zakończeniu:
const handle = InteractionManager.createInteractionHandle();
// run animation... (`runAfterInteractions` tasks are queued)
// later, on animation completion:
InteractionManager.clearInteractionHandle(handle);
// queued tasks run if all handles were cleared