first commit
This commit is contained in:
60
lib/services/background_sync_service.dart
Normal file
60
lib/services/background_sync_service.dart
Normal file
@@ -0,0 +1,60 @@
|
||||
import 'dart:async';
|
||||
import 'time_tracking_service.dart';
|
||||
import 'statistics_service.dart';
|
||||
|
||||
/// 后台同步服务 - 定期同步应用使用数据
|
||||
class BackgroundSyncService {
|
||||
final TimeTrackingService _timeTrackingService = TimeTrackingService();
|
||||
final StatisticsService _statisticsService = StatisticsService();
|
||||
|
||||
Timer? _syncTimer;
|
||||
bool _isRunning = false;
|
||||
|
||||
/// 启动后台同步
|
||||
Future<void> start() async {
|
||||
if (_isRunning) return;
|
||||
|
||||
_isRunning = true;
|
||||
|
||||
// 立即同步一次
|
||||
await syncNow();
|
||||
|
||||
// 每 15 分钟同步一次
|
||||
_syncTimer = Timer.periodic(const Duration(minutes: 15), (timer) async {
|
||||
await syncNow();
|
||||
});
|
||||
|
||||
// 启动原生后台追踪
|
||||
await _timeTrackingService.startBackgroundTracking();
|
||||
}
|
||||
|
||||
/// 停止后台同步
|
||||
Future<void> stop() async {
|
||||
_isRunning = false;
|
||||
_syncTimer?.cancel();
|
||||
_syncTimer = null;
|
||||
|
||||
await _timeTrackingService.stopBackgroundTracking();
|
||||
}
|
||||
|
||||
/// 立即同步
|
||||
Future<void> syncNow() async {
|
||||
try {
|
||||
print('Background sync: Starting sync...');
|
||||
|
||||
// 同步今日数据
|
||||
await _timeTrackingService.syncTodayData();
|
||||
|
||||
// 刷新统计
|
||||
await _statisticsService.refreshTodayStats();
|
||||
|
||||
print('Background sync: Completed');
|
||||
} catch (e) {
|
||||
print('Background sync error: $e');
|
||||
}
|
||||
}
|
||||
|
||||
/// 检查是否正在运行
|
||||
bool get isRunning => _isRunning;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user