我正在使用一个后台服务,这样当应用程序被杀死或在后台时,一些任务将被执行。
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的方式来实现。
任务是你在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>