反应本机后台服务崩溃应用

时间:2020-04-26 14:56:08

标签: react-native react-native-android

我正在使用后台服务,以便在应用被杀死或在后台运行时将执行某些任务

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中运行后台服务,以响应本机的方式在每1分钟执行一次任务,而不会导致应用崩溃。

1 个答案:

答案 0 :(得分: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.dev/docs/headless-js-android.html