it-swarm.com.de

So planen Sie einen Hintergrundjob zu einem bestimmten Zeitpunkt in React native

Ich möchte einige Task T zu einem bestimmten Zeitpunkt an einem Tag im Hintergrund in React native ausführen. Ich sehe, dass es in Android ab sofort möglich ist, Headless JS zu verwenden. Ich habe herausgefunden, dass diese Bibliothek diese https://github.com/vikeri/react-native-background-job implementiert hat und Ihnen erlaubt, im Hintergrund Dinge auszuführen.

Dies ist nicht ganz das, was ich suche, es erlaubt Ihnen nicht, eine Aufgabe T zu einer bestimmten Zeit einzuplanen. Kennt jemand eine Umgehung dafür? 

Ich habe diesen Thread überprüft Code zu einer bestimmten Zeit in React native ausführen / wo ich keine Lösung für mein Problem gefunden habe.

19
N Sharma

Ich bin auf ein ähnliches Problem gestoßen, leider können Sie in RN nichts ähnliches wie die CRON-Aktion angeben.

Meine Lösung für dieses Problem besteht darin, diese Bibliothek https://github.com/ocetnik/react-native-background-timer zu verwenden und die Differenz zwischen der aktuellen Uhrzeit und der geplanten Zeit der Aufgabe zu berechnen.

Die berechnete Zeit sollte in ms angegeben werden, damit Sie sie mit der bereitgestellten Funktion setTimeout verwenden können:

// 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);

Beispiel: 

Angenommen, Sie möchten die Aufgabe für morgen auf den 16. planen, in componentDidMount können Sie die Zeit zwischen dem aktuellen Datum und dem geplanten Datum berechnen. Verwenden wir moment dafür:

componentDidMount(){
  const scheduledDate = 
   moment().add(1,'d').set({hour:16,minute:0,second:0,millisecond:0})
  const diffTime = scheduledDate.diff(moment())
  this.timeoutId = BackgroundTimer.setTimeout(() => {
    console.log('tac');
  }, diffTime);
}

componentWillUnmount(){
 BackgroundTimer.clearTimeout(this.timeoutId);
}

Beachten Sie, dass diese Lösung anfällig für einen Benutzer ist, der die Uhrzeit auf seinem Telefon ändert. Die perfekte Lösung wäre, einen externen Dienst zum Abrufen der Zeit zu verwenden.

Zweitens muss die App mindestens im Hintergrund sein, damit dies funktioniert.

13
jmac

JavaScript-Code wird im Vordergrund mit nur einem Thread ausgeführt. Wenn Sie eine geplante Hintergrundaufgabe benötigen, müssen Sie native Module implementieren, wie im RN-Dokument beschrieben:

https://facebook.github.io/react-native/docs/native-modules-ios.html

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

Selbstverständlich gelten alle Plattformeinschränkungen (insbesondere iOS). 

1
Alt Eisen

Erstellen Sie eine Klasse und fügen Sie diese in Ihre Klasse ein 

public static final long NOTIFY_INTERVAL = 10 * 1000; // 30 minutes

@Override
    public void onCreate() {
        // cancel if already existed
        if (mTimer != null) {
            mTimer.cancel();
        } else {
            // recreate new
            mTimer = new Timer();
        }
        // schedule task
        mTimer.scheduleAtFixedRate(new TimeDisplayTimerTask(), 0, NOTIFY_INTERVAL);
    }

class TimeDisplayTimerTask extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // code
                }
            });
        }
    }
0
vijay chaudhary