我正在尝试为我的应用程序使用 React Native 后台操作库。
我已阅读文档并尝试实现它,但它不起作用。
单击 开始后台作业 按钮不会执行任何操作,没有通知,并且
console.log("in intensive task");
行永远不会被记录。我做错了什么?
import { Button } from '@react-native-material/core';
import { View } from 'react-native';
import BackgroundService from 'react-native-background-actions';
const sleep = (time:number) => new Promise<void>((resolve) => setTimeout(() => resolve(), time));
const veryIntensiveTask = async (taskDataArguments:any) => {
console.log("in intensive task");
const { delay } = taskDataArguments;
await new Promise( async (resolve) => {
for (let i = 0; BackgroundService.isRunning(); i++) {
console.log(i);
await sleep(delay);
}
});
};
const options = {
taskName: 'Example',
taskTitle: 'ExampleTask title',
taskDesc: 'ExampleTask description',
taskIcon: {
name: 'ic_launcher',
type: 'mipmap',
},
color: '#ff00ff',
parameters: {
delay: 1000,
},
};
export default function Background(){
const startBackgoundJob=async ()=>{
await BackgroundService.start(veryIntensiveTask, options);
console.log("background service started");
};
const updateBackgroundJob=async ()=>{
await BackgroundService.updateNotification({taskDesc: 'New ExampleTask description'});
console.log("background service updated");
};
const stopBackgroundJob=async ()=>{
await BackgroundService.stop();
console.log("background service stopped");
};
return(
<View style={{flex:1,display:"flex",justifyContent:"center",alignItems:"center"}}>
<Button title="start background job" onPress={startBackgoundJob}/>
<Button title="update background job" onPress={updateBackgroundJob}/>
<Button title="stop background job" onPress={stopBackgroundJob}/>
</View>
)
}
我尝试在具有 Android SDK 版本 30 和 33 的模拟器中以及运行 SDK 33 的物理设备上运行此程序。
我还确保
AndroidManifest.xml
文件包含
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
谢谢!
您可以检查一些事项来调试问题:
确保您已安装必要的依赖项。根据文档,您需要安装
react-native-background-actions
、react-native-standard-actions
和 react-native-material-core
。您可以通过在项目目录中运行 npm ls
来检查它们是否已安装。
检查 logcat 输出是否有与后台作业相关的错误。在Android模拟器中,您可以打开Android Studio中的
Logcat
视图来查看日志输出。查找与 react-native-background-actions
相关或与您的应用程序相关的任何输出。
确保
veryIntensiveTask
函数实际上通过添加一些额外的日志记录或延迟来执行一些密集的工作。例如,您可以在 console.log('doing very intensive work');
内部添加 veryIntensiveTask
,或者增加 delay
参数,使函数需要更长时间才能完成。
尝试更改任务名称和其他选项,看看是否有影响。例如,您可以将
taskName
更改为您的应用程序特有的内容,并将 taskTitle
和 taskDesc
更改为对您的后台任务有意义的值。
通过在函数开头添加
veryIntensiveTask
语句来确保调用 console.log
函数。这将帮助您确定问题是与后台作业注册有关还是与任务本身有关。
尝试在真实设备而不是模拟器上运行应用程序。
react-native-background-actions
的某些功能可能无法在模拟器上正常工作。
通过执行这些步骤,您应该能够识别问题并进行必要的更改以使后台作业正常运行。