Служба Background / Foreground для реагирования на натив с использованием Headless JS - PullRequest
0 голосов
/ 26 ноября 2018

Я использую Headless JS в реакции на родную для создания фонового сервиса.Мое требование - создать службу, которая будет вызываться из MainActivity (например, по нажатию кнопки) и продолжать работать даже после того, как приложение перейдет в фоновый режим.Мне удалось создать сервис с Headless JS и вызывать по нажатию кнопки.Для простоты я объясню простым кодом

MyTask.js

module.exports = async () => {
    console.log("I am called from java service");
    for(var i=0; i<1000000;i++){
        console.log("I am called from for loop"+i);
    }
};

При использовании приведенного выше кода, даже после того, как приложение переходит в фоновый режим, цикл for продолжает выполнение до тех пор, пока i не достигнет 999999 также я вижу сообщение консоли в консоли.

Но моя настоящая задача содержит некоторые функции async.Например, когда я использую следующий код в своей задаче, он не печатает, когда приложение переходит в фоновый режим

module.exports = async () => {
    console.log("I am called from java service");
    setInterval(() => {
        console.log("I am called from java service inside setInterval");
    }, 100);
}; 

Приведенный выше код должен печатать сообщение журнала непрерывно с интервалами 100 мс.Но как только приложение переходит в фоновый режим, оно перестает печатать.Снова, когда приложение возобновляет работу, оно начинает печатать снова.

Может ли кто-нибудь помочь в этом?

1 Ответ

0 голосов
/ 26 ноября 2018

Я полагаю, что ваша активность приостановлена ​​после того, как ваша асинхронная задача без головы (с точки зрения вызывающего абонента), это , что документация RN предлагает :

Вы можете сделатьчто угодно в вашей задаче, например сетевые запросы, таймеры и т. д., если это не касается пользовательского интерфейса.Как только ваша задача завершится (то есть обещание будет выполнено), React Native перейдет в режим «паузы» (если не запущены другие задачи или нет приложения переднего плана).

Хотя неясно,вы можете подумать, что таймеры JS, например, setInterval, будут поддерживать ваш код в рабочем состоянии ... Они не будут.

Решение, подразумеваемое RN doc, заключается в реализации собственной службы, например, встроенного таймера.JS - который, в основном, 1015 * РЕДАКТИРОВАТЬ

в отношении выполнения переднего планапо умолчанию задачи headlessJS не разрешены на переднем плане и вызывают ошибку.

...