React原生后台服务崩溃应用

问题描述 投票:0回答:1

我正在使用一个后台服务,这样当应用程序被杀死或在后台时,一些任务将被执行。

import BackgroundJob from 'react-native-background-job';

const backgroundJob = {
    jobKey: "myJob",
    job: () => console.log("Running in background")
   };

   BackgroundJob.register(backgroundJob);

   var backgroundSchedule = {
    jobKey: "myJob",
    period: 1000,
    timeout: 1000,
    exact: true
   }

<TouchableOpacity
                            onPress={() => {
                                BackgroundJob.schedule(backgroundSchedule)
                                .then(() => console.log("Success"))
                                .catch(err => console.err(err));
                            }}
                        >
                            <Text>Schedule regular job</Text>
                        </TouchableOpacity>

我正在使用上述代码,服务启动,但问题是当任务必须执行时,应用程序崩溃了。所以,谁能给我提供一个干净的代码,让我可以在android react native中运行后台服务,每隔1分钟执行一些任务,而不会让应用崩溃。

react-native react-native-android
1个回答
0
投票

你可以尝试用纯React Native的方式来实现。

任务是你在AppRegistry上注册的一个异步函数,类似于注册React应用程序。

import { AppRegistry } from 'react-native';
AppRegistry.registerHeadlessTask('SomeTaskName', () => require('SomeTaskName'));

然后,在SomeTaskName.js中,

module.exports = async (taskData) => {
  // do your background job here
};

你可以在你的任务中做任何事情,比如网络请求,定时器等等,只要不触及UI即可。一旦你的任务完成(即承诺解决了),React Native将进入 "暂停 "模式(除非有其他任务在运行,或者有前台应用)。

如果你需要通过按下TouchableOpacity来触发任务,你可以这样做。

import { AppRegistry, TouchableOpacity } from 'react-native';

const Task = require('SomeTaskName');

<TouchableOpacity
  onPress={() => {
    AppRegistry.registerHeadlessTask('SomeTaskName', () => Task);
  }
>
  <Text>Schedule regular job</Text>
</TouchableOpacity>

从: https:/reactnative.devdocsheadless-js-android.html

© www.soinside.com 2019 - 2024. All rights reserved.