2016-01-08 12 views
33

Gibt es eine Möglichkeit, einen Hintergrund-Service mit reactive-native auf Android zu erstellen? Ich möchte eine Art Timer, der jede Stunde oder so aufwacht, und startet eine einfache Javascript-Aufgabe.Hintergrund-Service auf reactive-native Android

+0

Haben Sie eine Lösung gefunden? – Sriraman

+0

Ich will auch wissen: hast du irgendeine Lösung gefunden? –

+3

Nein, aber ich hatte einen Workaround. Ich erstelle den Hintergrund-Service mit Java, der wiederum einige Javascript-Code mit reactContext.getJSModule (...). Emit ('javascript_event_name', params) Es ist schade, dass es keinen Service direkt in der react-native verfügbar ist API. – andri

Antwort

9

Ja, es kann getan werden.

React native arbeitet über der nativen (java/Objc) zu JS-Brücke mit einem Konzept von "nativen" und JS-Modulen (Module können Methoden haben, die Sie von der "anderen" Seite der Brücke aufrufen können). Das gesamte UI-Zeug ist auf der Brücke aufgebaut (das "native" Hauptmodul, das die Erzeugung von Ansichten behandelt, heißt "UIManager"). Es ist möglich, Bridge direkt zu verwenden. Die einzige Einschränkung besteht darin, dass die Kommunikation asynchron sein muss.

Sie können die JavaScript-Funktion aus dem JAVA-Code aufrufen. Check this link für die Dokumentation.

+1

Ja. Das habe ich beendet. Schade, dass es nicht in der Kern-API enthalten ist. – andri

+4

Hi @andri, könntest du so nett sein, Snippets im Geiste zu teilen? oder besser, wenn Sie ein Repo als Referenz haben. : D – holyxiaoxin

7

Release v0.36 Unterstützung headless-js, nur Android, für jetzt.

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

+0

Ist es möglich, die Methode eines nativen Moduls in einer kopflosen Aufgabe aufzurufen? Da die react-Bridge nach einiger Zeit unplugged (dösen-Modus) "schläft", scheint der native Anruf von der JS ausstehend zu sein, bis das Gerät wach ist. In meinem Fall möchte ich den nächsten Track einer Playlist (Javascript Seite) spielen, wenn mein Mutterspieler den vorherigen beendet hat. Ich benutze eine Headless-Aufgabe, um den JS zu benachrichtigen, welcher Aufruf "play (nextSong)" von meinem nativen Modul aus versucht. Aber die native Funktion wird erst ausgeführt, wenn ich das Gerät aufwecke. –

2

Absolut. In der Tat ist es ziemlich einfach, dies vollständig in JS zu erreichen (keine Notwendigkeit, nativen Code zu schreiben) plattformübergreifend mit react native queue und react native background task.

Es gibt einige Einschränkungen. Die Hintergrund-Aufgabe wird nur etwa alle 15 Minuten in kürzesten Intervallen abgefeuert (und das Timing ist nicht garantiert perfekt, wenn es überhaupt gezündet wird - der iOS/Android-Scheduler ist eine Art Black Box, die die Akkulaufzeit betrachtet CPU laden usw., wenn Sie bestimmen, wann eine geplante Aufgabe ausgelöst werden soll). Außerdem ist die Aufgabe auf 30 Sekunden Ausführung beschränkt.

I've written a tutorial on how to set all this up here.

Lassen Sie mich wissen, wenn Sie Schwierigkeiten haben, es in Gang zu bringen.