# 后台任务系统实现文档 ## 概述 本项目已成功集成iOS后台任务支持,使用Expo官方的 `expo-task-manager` 和 `expo-background-task` 库。该系统提供了完整的后台任务管理功能,支持任务注册、执行、状态监控等。 ## 技术栈 - **expo-task-manager**: Expo官方后台任务管理库 - **expo-background-task**: Expo官方后台任务库 - **React Native**: 跨平台移动应用框架 - **TypeScript**: 类型安全的JavaScript超集 ## 文件结构 ``` services/ ├── backgroundTaskManager.ts # 后台任务管理器核心逻辑 ├── backgroundTasks.ts # 示例任务定义 hooks/ ├── useBackgroundTasks.ts # 后台任务自定义Hook components/ ├── BackgroundTaskTest.tsx # 后台任务测试组件 ``` ## 核心功能 ### 1. 后台任务管理器 (services/backgroundTaskManager.ts) #### 主要特性 - **单例模式**: 确保全局只有一个任务管理器实例 - **任务注册**: 支持注册自定义后台任务 - **状态管理**: 完整的任务状态跟踪和持久化 - **错误处理**: 完善的错误处理和日志记录 - **后台获取**: 自动注册后台获取任务 #### 核心方法 ```typescript // 初始化后台任务管理器 await backgroundTaskManager.initialize(); // 注册自定义任务 await backgroundTaskManager.registerTask({ id: 'my-task', name: '我的任务', handler: async (data) => { // 您的任务逻辑 console.log('执行任务:', data); }, options: { minimumInterval: 300, // 5分钟最小间隔 stopOnTerminate: false, startOnBoot: true, } }); // 手动执行任务 await backgroundTaskManager.executeTask('my-task', { customData: 'value' }); // 执行所有任务 const results = await backgroundTaskManager.executeAllTasks(); // 获取任务状态 const status = backgroundTaskManager.getTaskStatus('my-task'); ``` ### 2. 自定义Hook (hooks/useBackgroundTasks.ts) #### 主要特性 - **状态管理**: 管理任务状态和初始化状态 - **自动初始化**: 组件挂载时自动初始化任务管理器 - **便捷接口**: 提供简化的任务操作方法 - **实时更新**: 任务状态实时更新 #### 使用示例 ```typescript const { isInitialized, taskStatuses, registeredTasks, registerTask, executeTask, executeAllTasks, } = useBackgroundTasks(); // 注册任务 await registerTask({ id: 'data-sync', name: '数据同步', handler: async () => { // 数据同步逻辑 } }); // 执行任务 await executeTask('data-sync'); ``` ### 3. 示例任务 (services/backgroundTasks.ts) #### 预定义任务类型 - **数据同步任务**: 同步用户数据、运动记录等 - **健康数据更新任务**: 更新步数、心率等健康数据 - **通知检查任务**: 检查是否需要发送通知 - **缓存清理任务**: 清理过期缓存文件 - **用户行为分析任务**: 分析用户使用模式 #### 创建自定义任务 ```typescript import { createCustomTask } from '@/services/backgroundTasks'; const myTask = createCustomTask( 'my-custom-task', '我的自定义任务', async (data) => { // 您的任务逻辑 console.log('执行自定义任务:', data); }, { minimumInterval: 120, // 2分钟 stopOnTerminate: false, startOnBoot: true, } ); ``` ## 使用指南 ### 1. 基本使用 ```typescript import { useBackgroundTasks } from '@/hooks/useBackgroundTasks'; import { createCustomTask } from '@/services/backgroundTasks'; const MyComponent = () => { const { registerTask, executeTask } = useBackgroundTasks(); const handleCreateTask = async () => { const task = createCustomTask( 'my-task', '我的任务', async (data) => { // 实现您的后台任务逻辑 console.log('后台任务执行中...'); // 例如:数据同步 await syncUserData(); // 例如:健康数据更新 await updateHealthData(); // 例如:发送通知 await checkAndSendNotifications(); } ); await registerTask(task); }; const handleExecuteTask = async () => { await executeTask('my-task', { customData: 'value' }); }; return (