Подтвердить что ты не робот

Как я могу запускать фоновые задачи в React Native?

Я создал небольшое приложение iOS в React Native, которое отслеживает местоположение, регулярно отправляет lat/lng на сервер пользователя Выбор. Однако это работает только тогда, когда приложение находится на переднем плане. Как запустить эту задачу в фоновом режиме, когда пользователь находится в других приложениях?

4b9b3361

Ответ 1

В настоящее время, к сожалению, нет поддержки фоновых задач любого рода. Функция, на которую вы ссылаетесь, будет фоновым таймером. Такой таймер эта боль в продукте (запрос функции) для ответа на native, вы можете увеличить ее, чтобы показать повышенный спрос на эту функцию.

РЕДАКТИРОВАТЬ 12/2016: Реально не существует. У вас есть API без головы JS с RN 0.33, но он предназначен только для android. Также ваше приложение будет разбиваться, если оно работает на переднем плане, поэтому вы должны быть осторожны с его использованием. Спасибо @Feng за указание на это.

Ответ 3

В течение последних нескольких месяцев экосистема React Native продвигалась безнадежно, и появилось несколько плагинов, чтобы устранить боль из-за невозможности запуска кода в фоновом режиме.

https://github.com/transistorsoft/react-native-background-fetch - Периодически просыпайтесь в течение 30 секунд, чтобы запустить какой-то произвольный JS-код. Не подходит для геолокации высокого разрешения, так как время между пробуждениями будет составлять 15 минут или более.

https://github.com/transistorsoft/react-native-background-geolocation - лучше подходит для этой ситуации, специально предназначенной для геолокации в фоновом режиме.

Ответ 4

Я использую это, и, кажется, работает: https://github.com/ocetnik/react-native-background-timer

Периодически генерировать событие (даже когда приложение находится в фоновом режиме).

Вы можете использовать функции setInterval и setTimeout. Этот API-интерфейс идентичен API-интерфейсу реагирования и может использоваться для быстрой замены существующих таймеров фоновыми таймерами.

import BackgroundTimer from 'react-native-background-timer';

// Start a timer that runs continuous after X milliseconds
const intervalId = BackgroundTimer.setInterval(() => {
    // this will be executed every 200 ms
    // even when app is the the background
    console.log('tic');
}, 200);

// Cancel the timer when you are done with it
BackgroundTimer.clearInterval(intervalId);

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

// Cancel the timeout if necessary
BackgroundTimer.clearTimeout(timeoutId);