feat(initialize): 优化权限和健康监听服务的初始化流程,增加延迟和错误处理
fix(version): 更新应用版本号至1.0.26 feat(sleep): 增加睡眠阶段统计的准确性,优化日志输出
This commit is contained in:
@@ -139,6 +139,8 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
||||
|
||||
permissionInitializedRef.current = true;
|
||||
|
||||
const delay = (ms: number) => new Promise<void>(resolve => setTimeout(resolve, ms));
|
||||
|
||||
const initializePermissionServices = async () => {
|
||||
try {
|
||||
logger.info('🔐 开始初始化需要权限的服务(onboarding 已完成)...');
|
||||
@@ -148,14 +150,17 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
||||
logger.info('✅ 通知服务初始化完成');
|
||||
|
||||
// 2. 延迟请求 HealthKit 权限(避免立即弹窗打断用户)
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
await ensureHealthPermissions();
|
||||
await delay(2000);
|
||||
try {
|
||||
const granted = await ensureHealthPermissions();
|
||||
if (granted) {
|
||||
logger.info('✅ HealthKit 权限请求完成');
|
||||
} catch (error) {
|
||||
logger.warn('⚠️ HealthKit 权限请求失败,可能在模拟器上运行:', error);
|
||||
} else {
|
||||
logger.warn('⚠️ 用户未授予 HealthKit 权限,相关功能将受限');
|
||||
}
|
||||
}, 2000);
|
||||
} catch (error) {
|
||||
logger.warn('⚠️ HealthKit 权限请求失败,可能在模拟器上运行:', error);
|
||||
}
|
||||
|
||||
// 3. 异步同步 Widget 数据
|
||||
syncWidgetDataInBackground();
|
||||
@@ -163,6 +168,7 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
||||
logger.info('🎉 权限相关服务初始化完成');
|
||||
} catch (error) {
|
||||
logger.error('❌ 权限相关服务初始化失败:', error);
|
||||
throw error;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -314,19 +320,35 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
||||
try {
|
||||
logger.info('💪 初始化健康监听服务...');
|
||||
|
||||
// 并行初始化锻炼和睡眠监听
|
||||
await Promise.allSettled([
|
||||
workoutMonitorService.initialize().then(() =>
|
||||
logger.info('✅ 锻炼监听服务初始化成功')
|
||||
),
|
||||
sleepMonitorService.initialize().then(() =>
|
||||
logger.info('✅ 睡眠监听服务初始化成功')
|
||||
),
|
||||
const [workoutResult, sleepResult] = await Promise.allSettled([
|
||||
workoutMonitorService.initialize(),
|
||||
sleepMonitorService.initialize(),
|
||||
]);
|
||||
|
||||
logger.info('🎉 健康监听服务初始化完成');
|
||||
const workoutReady = workoutResult.status === 'fulfilled';
|
||||
if (workoutReady) {
|
||||
logger.info('✅ 锻炼监听服务初始化成功');
|
||||
} else {
|
||||
logger.error('❌ 锻炼监听服务初始化失败:', workoutResult.reason);
|
||||
}
|
||||
|
||||
const sleepReady = sleepResult.status === 'fulfilled';
|
||||
if (sleepReady) {
|
||||
logger.info('✅ 睡眠监听服务初始化成功');
|
||||
} else {
|
||||
logger.error('❌ 睡眠监听服务初始化失败:', sleepResult.reason);
|
||||
}
|
||||
|
||||
if (workoutReady && sleepReady) {
|
||||
logger.info('🎉 健康监听服务初始化完成');
|
||||
} else {
|
||||
logger.warn('⚠️ 健康监听服务部分未能初始化成功,请检查上述错误日志');
|
||||
}
|
||||
|
||||
return workoutReady && sleepReady;
|
||||
} catch (error) {
|
||||
logger.error('❌ 健康监听服务初始化失败:', error);
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -359,14 +381,21 @@ function Bootstrapper({ children }: { children: React.ReactNode }) {
|
||||
}
|
||||
};
|
||||
|
||||
// 执行权限相关初始化
|
||||
initializePermissionServices();
|
||||
|
||||
// 交互完成后执行后台服务
|
||||
initializeBackgroundServices();
|
||||
|
||||
// 空闲时执行非关键服务
|
||||
initializeIdleServices();
|
||||
const runInitializationSequence = async () => {
|
||||
try {
|
||||
await initializePermissionServices();
|
||||
} catch {
|
||||
logger.warn('⚠️ 权限相关服务初始化失败,将继续启动后台和空闲服务以便后续重试');
|
||||
}
|
||||
|
||||
// 交互完成后执行后台服务
|
||||
initializeBackgroundServices();
|
||||
|
||||
// 空闲时执行非关键服务
|
||||
initializeIdleServices();
|
||||
};
|
||||
|
||||
runInitializationSequence();
|
||||
|
||||
}, [onboardingCompleted, profile.name]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user