Comment puis-je exécuter des tâches en arrière-plan dans React Native?

J'ai construit une petite application iOS dans React Native qui effectue un suivi de localisation, envoyant régulièrement le lat/lng à un serveur du choix de l'utilisateur. Toutefois, cela ne fonctionne que lorsque l'application est au premier plan. Comment puis-je exécuter cette tâche en arrière-plan lorsque l'utilisateur est dans d'autres applications?

56
demandé sur Daniel Schmidt 2016-02-13 09:03:31

5 réponses

Actuellement, il n'y a malheureusement pas de support pour les tâches d'arrière-plan d'aucune sorte. La fonctionnalité à laquelle vous faites référence serait une minuterie d'arrière-plan. Une telle minuterie est cette douleur de produit (une demande de fonctionnalité) pour react native, vous pouvez le mettre à jour pour montrer une demande accrue pour cette fonctionnalité.

EDIT 12/2016: il n'y a toujours pas d'option réelle. Vous avez l'API Headless JS depuis RN 0.33, mais c'est seulement pour android. En outre, votre application va planter si cela fonctionne dans le premier plan de sorte que vous devez faire attention à l'utiliser. Merci à @ Feng pour le souligner.

44
répondu Daniel Schmidt 2016-12-29 08:15:53

Et maintenant il y a react-native-background-task qui est une API unique pour Android et iOS.

13
répondu Matthew Wilcoxson 2017-09-01 12:22:41

L'écosystème React Native a évolué à un rythme effréné au cours des derniers mois, et quelques plugins ont surgi pour résoudre la douleur de ne pas être en mesure d'exécuter du code en arrière-plan.

Https://github.com/transistorsoft/react-native-background-fetch -- Réveillez-vous pendant 30 secondes périodiquement pour exécuter du code JS arbitraire. Ne convient pas pour haute résolution géolocalisation, comme le temps entre wake-ups sera 15 min ou plus.

Https://github.com/transistorsoft/react-native-background-geolocation -- un meilleur ajustement pour cette situation, ciblée spécifiquement sur la géolocalisation en arrière-plan.

9
répondu frontendloader 2016-10-02 02:15:43

J'utilise cela, et il semble fonctionner: https://github.com/ocetnik/react-native-background-timer

Émettent événement périodiquement (même lorsque l'application est en arrière-plan).

Vous pouvez utiliser les fonctions setInterval et setTimeout. Cette API est identique à celle de react-native et peut être utilisée pour remplacer rapidement les minuteries existantes par des minuteries d'arrière-plan.

import BackgroundTimer from 'react-native-background-timer';

// Start a timer that runs continuous after X milliseconds
const intervalId = BackgroundTimer.setInterval(() => {
    // this will be executed every 200 ms
    // even when app is the the background
    console.log('tic');
}, 200);

// Cancel the timer when you are done with it
BackgroundTimer.clearInterval(intervalId);

// Start a timer that runs once after X milliseconds
const timeoutId = BackgroundTimer.setTimeout(() => {
    // this will be executed once after 10 seconds
    // even when app is the the background
    console.log('tac');
}, 10000);

// Cancel the timeout if necessary
BackgroundTimer.clearTimeout(timeoutId);
4
répondu Venryx 2016-12-30 06:15:29

Ces bibliothèques peuvent vous aider à atteindre la fonctionnalité souhaitée:

  1. réagir-native-arrière-plan-travail
  2. réagir-native-fond-tâche
  3. réagir-native-fond-fetch

Vous pouvez également utiliser Headless js de react-native. Mais son seul disponible pour Android.

2
répondu Provash Shoumma 2018-05-26 17:58:03