2016-11-24 1 views
3

J'utilise Headless.js pour exécuter des services d'arrière-plan avec React Native. Nous rencontrons pas mal de problèmes avec son utilisation. Quelles sont mes options pour exécuter les services d'arrière-plan Android à l'aide de React Native?Réagissez Services d'arrière-plan natifs et Android

Répondre

0

Je suppose que vous devrez l'écrire vous-même. Malheureusement Headless JS s'arrête sur l'achèvement de la tâche, donc je ne suis pas sûr que ce soit approprié.

Vous pouvez faire n'importe quoi dans votre tâche tant qu'il ne touche pas à l'interface utilisateur: demandes réseau, minuteries, etc. Une fois votre tâche terminée (c'est-à-dire que la promesse est résolue), React Native passera en mode "suspendu" (sauf si d'autres tâches sont en cours d'exécution ou s'il existe une application de premier plan).

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

Mise à jour: il est possible de maintenir le processus en cours d'exécution si l'application perd le focus. Je vais devoir chercher la source de l'application de test, pour donner un exemple. En outre, j'ai finalement écrit un service d'arrière-plan, pour démarrer au démarrage, dans Android. React Native n'autorise pas ce type de service, et RN n'a pas l'intention de créer des applications complètement sans tête.

+0

plz ajouter un peu de code le lien peut être mort au fil du temps –

+0

_Les liens vers des ressources externes sont encouragés, mais s'il vous plaît ajouter le contexte autour du lien afin que vos amis auront une idée de ce que c'est et pourquoi il est là. Toujours citer la partie la plus pertinente d'un lien important, dans le cas où le site cible est inaccessible ou se déconnecte définitivement._ – Bugs

0

nom de fichier add BackgroundAudio.java

import android.content.Intent; 
import android.os.Bundle; 

import com.facebook.react.HeadlessJsTaskService; 
import com.facebook.react.bridge.Arguments; 
import com.facebook.react.jstasks.HeadlessJsTaskConfig; 

public class BackgroundAudio extends HeadlessJsTaskService { 

    @Override 
    protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      return new HeadlessJsTaskConfig(
        "BackgroundAudio", 
        Arguments.fromBundle(extras), 
        5000); 
     } 
     return null; 
    } 
} 

modifier AndroidManifest.xml

<service android:name=".BackgroundAudio" android:enabled="true" android:label="BackgroundAudio" /> 

Puis dans mes index.android.js:

import BackgroundAudio from './src/BackgroundAudio' 
AppRegistry.registerHeadlessTask('BackgroundAudio',() => BackgroundAudio) 

Enfin, BackgroundAudio.js le fichier référencé dans l'index.android.js se lit comme tel:

export async function BackgroundAudio (taskData) { 
    alert('BACKGROUND AUDIO') 
} 
+0

comment démarrer ** BackgroundAudio ** service – Man

0

Il y a quelques paquets qui ont été créés depuis que vous avez posé cette question qui pourrait être utile selon votre cas d'utilisation exact.

Plus précisément, vous pouvez utiliser react native queue avec react native background task pour planifier facilement une tâche d'arrière-plan pour exécuter périodiquement (à peu près tous les ~ 15 min votre tâche planifiée fonctionnera pendant au maximum 30 secondes - utiliser la file d'attente pour gérer la gestion de délai d'attente des tâches) lorsque votre application est fermé (cela fonctionne multi plate-forme pour iOS et Android). Cependant, si votre intention est d'avoir un service qui fonctionne constamment en arrière-plan, je ne suis pas certain que ce soit possible dans le monde RN (en ce qui concerne le temps de mon poste).