feat(background): 增强iOS后台任务系统,添加processing任务类型支持
- 添加新的processing任务标识符到iOS配置文件 - 重构BackgroundTaskBridge支持不同任务类型(refresh/processing) - 增强后台任务日志记录和调试信息 - 修复任务类型配置不匹配问题 - 改进任务调度逻辑和错误处理机制 - 添加任务执行时间戳记录用于调试 - 移除notification-settings中未使用的AuthGuard依赖
This commit is contained in:
@@ -396,7 +396,7 @@ export class BackgroundTaskManagerV2 {
|
||||
logger.info('[BackgroundTaskManagerV2] 配置后台任务...');
|
||||
await NativeBackgroundModule.configure({
|
||||
identifier: BACKGROUND_TASK_IDENTIFIER,
|
||||
taskType: 'refresh',
|
||||
taskType: 'processing', // 使用 processing 类型,与 Info.plist 中的配置匹配
|
||||
requiresNetworkConnectivity: false,
|
||||
requiresExternalPower: false,
|
||||
defaultDelay: DEFAULT_RESCHEDULE_INTERVAL_SECONDS,
|
||||
@@ -469,24 +469,43 @@ export class BackgroundTaskManagerV2 {
|
||||
|
||||
private async handleBackgroundExecution(): Promise<void> {
|
||||
if (this.executingPromise) {
|
||||
logger.info('[BackgroundTaskManagerV2] 已有后台任务在执行,忽略重复触发');
|
||||
logger.warn('[BackgroundTaskManagerV2] ⚠️ 已有后台任务在执行,忽略重复触发');
|
||||
return;
|
||||
}
|
||||
|
||||
const startTime = Date.now();
|
||||
logger.info('[BackgroundTaskManagerV2] 开始执行后台任务');
|
||||
logger.info('[BackgroundTaskManagerV2] ===== 开始执行后台任务 =====');
|
||||
logger.info(`[BackgroundTaskManagerV2] 执行时间: ${new Date().toLocaleString()}`);
|
||||
logger.info('[BackgroundTaskManagerV2] 检查通知权限...');
|
||||
|
||||
// 记录任务开始时间
|
||||
await AsyncStorage.setItem('@last_background_task_start', Date.now().toString());
|
||||
|
||||
this.executingPromise = executeBackgroundTasks()
|
||||
.then(async () => {
|
||||
const executionTime = Date.now() - startTime;
|
||||
logger.info(`[BackgroundTaskManagerV2] 后台任务执行成功,耗时: ${executionTime}ms`);
|
||||
logger.info(`[BackgroundTaskManagerV2] ✅ 后台任务执行成功,耗时: ${executionTime}ms`);
|
||||
|
||||
if (isIosBackgroundModuleAvailable) {
|
||||
try {
|
||||
// 确保任务完成前有足够的时间完成所有操作
|
||||
logger.info('[BackgroundTaskManagerV2] 等待1秒确保所有操作完成...');
|
||||
await new Promise(resolve => setTimeout(resolve, 1000)); // 等待1秒确保所有操作完成
|
||||
|
||||
await NativeBackgroundModule.complete(true, DEFAULT_RESCHEDULE_INTERVAL_SECONDS);
|
||||
logger.info('[BackgroundTaskManagerV2] 已标记后台任务成功完成并重新调度');
|
||||
logger.info('[BackgroundTaskManagerV2] ✅ 已标记后台任务成功完成并重新调度');
|
||||
|
||||
// 记录成功执行的时间戳
|
||||
const successTime = Date.now();
|
||||
await AsyncStorage.setItem('@last_background_execution_success', successTime.toString());
|
||||
logger.info(`[BackgroundTaskManagerV2] ✅ 成功执行时间戳: ${new Date(successTime).toLocaleString()}`);
|
||||
|
||||
// 检查后台任务状态
|
||||
const status = await this.getStatus();
|
||||
const statusText = await this.checkStatus();
|
||||
logger.info(`[BackgroundTaskManagerV2] 后台任务状态检查: ${status} (${statusText})`);
|
||||
} catch (error) {
|
||||
logger.error('[BackgroundTaskManagerV2] 标记后台任务成功完成失败', error);
|
||||
logger.error('[BackgroundTaskManagerV2] ❌ 标记后台任务成功完成失败', error);
|
||||
// 即使标记失败,也尝试手动重新调度
|
||||
await this.scheduleNextTask();
|
||||
}
|
||||
@@ -494,14 +513,14 @@ export class BackgroundTaskManagerV2 {
|
||||
})
|
||||
.catch(async (error) => {
|
||||
const executionTime = Date.now() - startTime;
|
||||
logger.error(`[BackgroundTaskManagerV2] 后台任务执行失败,耗时: ${executionTime}ms`, error);
|
||||
logger.error(`[BackgroundTaskManagerV2] ❌ 后台任务执行失败,耗时: ${executionTime}ms`, error);
|
||||
|
||||
if (isIosBackgroundModuleAvailable) {
|
||||
try {
|
||||
await NativeBackgroundModule.complete(false, DEFAULT_RESCHEDULE_INTERVAL_SECONDS);
|
||||
logger.info('[BackgroundTaskManagerV2] 已标记后台任务失败并重新调度');
|
||||
} catch (completionError) {
|
||||
logger.error('[BackgroundTaskManagerV2] 标记后台任务失败状态时出错', completionError);
|
||||
logger.error('[BackgroundTaskManagerV2] ❌ 标记后台任务失败状态时出错', completionError);
|
||||
// 即使标记失败,也尝试手动重新调度
|
||||
await this.scheduleNextTask();
|
||||
}
|
||||
@@ -509,6 +528,7 @@ export class BackgroundTaskManagerV2 {
|
||||
})
|
||||
.finally(() => {
|
||||
this.executingPromise = null;
|
||||
logger.info('[BackgroundTaskManagerV2] ===== 后台任务处理完成 =====');
|
||||
});
|
||||
|
||||
await this.executingPromise;
|
||||
|
||||
Reference in New Issue
Block a user