我正在使用后台服务,以便在应用被杀死或在后台运行时将执行某些任务
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分钟执行一次任务,而不会导致应用崩溃。
答案 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>