studio programacion para móviles español edición desarrollo desarrollar curso aprende aplicaciones android ios react-native react-native-android react-native-ios

android - programacion - Cómo programar un trabajo de fondo en un momento específico en reaccionar nativo



manual programacion android español pdf (3)

Crea una clase y agrega esto a tu clase

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

Quiero ejecutar alguna Tarea T a una hora específica en un día en segundo plano para reaccionar de forma nativa. Veo que es posible en Android a partir de ahora usando Headless JS . Encontré que esta biblioteca implementó esta https://github.com/vikeri/react-native-background-job y te permite ejecutar cosas en segundo plano.

Esto no es completamente lo que estoy buscando, no te permite programar una tarea T en un momento específico. ¿Alguien sabe algún trabajo alrededor de esto?

He comprobado este hilo Ejecutar código en un momento específico en Reacción nativa donde no encontré una solución a mi problema.



Encontré un problema similar, desafortunadamente, no puedes especificar algo similar a la acción CRON en RN.

Mi solución a ese problema es usar esta biblioteca https://github.com/ocetnik/react-native-background-timer y calcular la diferencia entre la hora actual y la hora programada para la tarea.

El tiempo calculado debe estar en ms, para que pueda usarlo con la función provista setTimeout :

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

Ejemplo:

Digamos que quiere programar la tarea para mañana a las 16, en componentDidMount puede calcular el tiempo entre ahora y la fecha programada. Usemos el moment para eso:

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

Tenga en cuenta que esta solución es vulnerable a que un usuario cambie la hora en su teléfono. La solución perfecta sería utilizar algún servicio externo para obtener el tiempo.

En segundo lugar, la aplicación debe estar al menos en segundo plano para que esto funcione.