web-dev-qa-db-fra.com

Service en arrière-plan sur react-native android

Est-il possible de créer un service en arrière-plan avec react-native sur Android? Je voudrais une sorte de minuterie qui se réveille toutes les heures environ et lance une tâche javascript simple.

48
andri

Oui, ça peut se faire.

React native fonctionne par-dessus le pont natif (Java/Objc) vers JS avec un concept de modules "natifs" et JS (les modules peuvent avoir des méthodes que vous pouvez appeler de "l'autre" côté du pont). Tous les éléments de l'interface utilisateur sont construits au-dessus du pont (le module "natif" principal qui gère la génération des vues s'appelle "UIManager"). Il est possible d'utiliser directement le pont, la seule restriction étant que la communication doit être asynchrone.

Vous pouvez appeler la fonction javascript à partir du code Java. Cochez ce lien pour la documentation.

11
Sriraman

La version v0.36 prend en charge headless-js, uniquement Android, pour le moment.

https://facebook.github.io/react-native/docs/headless-js-Android.html

9
lironhel

Absolument. En fait, il est assez facile à présent de réaliser cela entièrement en JS (inutile d'écrire du code natif) sur plusieurs plates-formes avec réaction à la file d'attente native et réaction à une tâche en arrière-plan native .

Il y a quelques limitations. La tâche d’arrière-plan ne sera déclenchée que toutes les 15 minutes environ (et le minutage n’est pas garanti s'il est déclenché, le planificateur iOS/Android est en quelque sorte une boîte noire qui se penche sur la charge du processeur, etc., pour déterminer quand déclencher une tâche planifiée). De plus, la tâche est limitée à 30 secondes d'exécution.

J'ai écrit un tutoriel sur la façon de régler tout cela ici .

Faites-moi savoir si vous avez de la difficulté à le faire fonctionner.

9
billmalarky

Cela fonctionne dans mon cas, utilisez la bibliothèque react-native-background-job Pour exécuter un service en arrière-plan. Cela fonctionne après la tuer l'application. https://github.com/vikeri/react-native-background-job

import BackgroundJob from "react-native-background-job";
const regularJobKey = "regularJobKey";

BackgroundJob.register({
  jobKey: regularJobKey,
  job: () => {
    
    console.log('Background Service Call!');

  }
});
<TouchableHighlight
  onPress={() => {
    BackgroundJob.schedule({
      jobKey: regularJobKey,
      period: 2000
    });
  }}
>
  <Text>Schedule regular job</Text>
</TouchableHighlight>

Exemple ici: https://github.com/vikeri/react-native-background-job/blob/master/example/index.Android.js

1
Akshay Italiya