61 lines
1.4 KiB
Dart
61 lines
1.4 KiB
Dart
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;
|
|
}
|
|
|