313 lines
7.0 KiB
Markdown
313 lines
7.0 KiB
Markdown
# 优化实施计划
|
||
|
||
## 优化目标
|
||
|
||
基于函数调用分析报告,对 Android Backup GUI 进行系统性优化,目标:
|
||
1. **性能提升**:备份/恢复速度提升 30-50%
|
||
2. **代码质量**:消除重复代码,统一错误处理
|
||
3. **用户体验**:详细进度、友好错误提示、智能建议
|
||
4. **可靠性**:增加重试机制、改进错误恢复
|
||
|
||
---
|
||
|
||
## Phase 1: 基础优化(P1 优先级)
|
||
|
||
### 1.1 提取密码获取公共函数
|
||
**问题**:密码获取逻辑在 3+ 处重复
|
||
|
||
**实施**:
|
||
- 创建 `CredentialProvider` 对象
|
||
- 统一密码获取和设置逻辑
|
||
- 支持从 KeyStore 和配置文件获取
|
||
|
||
**文件修改**:
|
||
- `app/src/main/java/com/example/androidbackupgui/backup/CredentialProvider.kt` (新建)
|
||
- `BackupViewModel.kt`
|
||
- `ConfigViewModel.kt`
|
||
- `RestoreScreen.kt`
|
||
|
||
**预期收益**:
|
||
- 消除 ~50 行重复代码
|
||
- 统一密码管理逻辑
|
||
- 便于后续维护
|
||
|
||
### 1.2 应用信息缓存机制
|
||
**问题**:重复查询应用版本、大小等信息
|
||
|
||
**实施**:
|
||
- 创建 `AppMetadataCache` 对象
|
||
- 缓存版本号、APK 路径、OBB 信息
|
||
- 支持手动失效和自动过期
|
||
|
||
**文件修改**:
|
||
- `app/src/main/java/com/example/androidbackupgui/backup/AppMetadataCache.kt` (新建)
|
||
- `BackupOperation.kt`
|
||
- `AppScanner.kt`
|
||
|
||
**预期收益**:
|
||
- 减少 30-40% 的 RootShell 调用
|
||
- 增量备份速度提升 50%+
|
||
|
||
### 1.3 批量 RootShell 调用优化
|
||
**问题**:多次独立 RootShell 调用导致进程开销
|
||
|
||
**实施**:
|
||
- 创建 `BatchRootShell` 工具类
|
||
- 实现批量文件检查、版本查询、状态检查
|
||
- 优化 BackupOperation 中的重复调用
|
||
|
||
**文件修改**:
|
||
- `app/src/main/java/com/example/androidbackupgui/backup/BatchRootShell.kt` (新建)
|
||
- `BackupOperation.kt`
|
||
- `RestoreOperation.kt`
|
||
|
||
**预期收益**:
|
||
- 减少 20-30% 的 RootShell 调用
|
||
- 备份速度提升 15-25%
|
||
|
||
---
|
||
|
||
## Phase 2: 核心优化(P0 优先级)
|
||
|
||
### 2.1 增量备份优化
|
||
**问题**:每次备份都查询所有应用信息
|
||
|
||
**实施**:
|
||
- 优化增量检查逻辑
|
||
- 批量查询版本号
|
||
- 智能跳过未变化应用
|
||
|
||
**文件修改**:
|
||
- `BackupOperation.kt` - `backupApps()` 方法
|
||
- `AppMetadataCache.kt` - 集成缓存
|
||
|
||
**预期收益**:
|
||
- 增量备份时间减少 80%+
|
||
- 网络传输减少 90%+
|
||
|
||
### 2.2 智能并发控制
|
||
**问题**:固定并发数 Semaphore(3) 不适应所有场景
|
||
|
||
**实施**:
|
||
- 根据 CPU 核心数动态调整并发
|
||
- 根据内存使用率调整并发
|
||
- SSD/eMMC 存储类型检测
|
||
|
||
**文件修改**:
|
||
- `BackupOperation.kt` - `backupApps()` 方法
|
||
- `RestoreOperation.kt` - `restoreApps()` 方法
|
||
|
||
**预期收益**:
|
||
- 高端设备备份速度提升 30%+
|
||
- 低端设备稳定性提升
|
||
|
||
### 2.3 Restic 增量备份优化
|
||
**问题**:Restic 增量去重是核心竞争力,但调用链可优化
|
||
|
||
**实施**:
|
||
- 优化 ResticCommandRunner 调用
|
||
- 增加连接健康检查
|
||
- 实现网络重试机制
|
||
|
||
**文件修改**:
|
||
- `ResticCommandRunner.kt`
|
||
- `BackendExecutor.kt`
|
||
- `RestBridgeRunner.kt`
|
||
|
||
**预期收益**:
|
||
- 远程备份成功率提升
|
||
- 网络异常恢复能力增强
|
||
|
||
---
|
||
|
||
## Phase 3: 用户体验优化(P2 优先级)
|
||
|
||
### 3.1 进度显示优化
|
||
**问题**:进度信息不够详细,缺少预计时间
|
||
|
||
**实施**:
|
||
- 重构 `BackupProgress` 数据类
|
||
- 计算总体进度百分比
|
||
- 估算剩余时间
|
||
|
||
**文件修改**:
|
||
- `BackupOperation.kt` - `BackupProgress` 类
|
||
- `BackupViewModel.kt` - 进度处理
|
||
- `BackupScreen.kt` - UI 显示
|
||
|
||
**预期收益**:
|
||
- 用户体验显著提升
|
||
- 备份过程更透明
|
||
|
||
### 3.2 错误处理优化
|
||
**问题**:错误信息不友好,缺少解决建议
|
||
|
||
**实施**:
|
||
- 扩展 `AppError` 类型系统
|
||
- 添加错误解决建议
|
||
- 支持错误恢复机制
|
||
|
||
**文件修改**:
|
||
- `AppError.kt`
|
||
- `BackupViewModel.kt`
|
||
- `RestoreOperation.kt`
|
||
|
||
**预期收益**:
|
||
- 用户自助解决问题能力提升
|
||
- 技术支持成本降低
|
||
|
||
### 3.3 恢复预览功能
|
||
**问题**:恢复前无法预览将要恢复的内容
|
||
|
||
**实施**:
|
||
- 创建 `RestorePreview` 数据类
|
||
- 显示将要恢复的应用列表
|
||
- 标记会覆盖的应用
|
||
|
||
**文件修改**:
|
||
- `RestoreScreen.kt`
|
||
- `RestoreOperation.kt`
|
||
|
||
**预期收益**:
|
||
- 避免误恢复
|
||
- 用户决策更明智
|
||
|
||
---
|
||
|
||
## Phase 4: 高级优化(P3 优先级)
|
||
|
||
### 4.1 并行恢复优化
|
||
**问题**:恢复操作串行执行,效率低
|
||
|
||
**实施**:
|
||
- APK 安装并行化
|
||
- 数据恢复并行化
|
||
- SSAID 恢复串行化(依赖已安装应用)
|
||
|
||
**文件修改**:
|
||
- `RestoreOperation.kt` - `restoreApps()` 方法
|
||
|
||
**预期收益**:
|
||
- 恢复速度提升 40%+
|
||
|
||
### 4.2 备份完整性校验
|
||
**问题**:备份后缺少完整性校验
|
||
|
||
**实施**:
|
||
- 备份后自动校验归档
|
||
- 生成校验和文件
|
||
- 支持手动校验
|
||
|
||
**文件修改**:
|
||
- `BackupOperation.kt` - 备份后校验
|
||
- `ResticBackup.kt` - Restic 校验
|
||
|
||
**预期收益**:
|
||
- 数据完整性保障
|
||
- 用户信心提升
|
||
|
||
### 4.3 配置导入导出优化
|
||
**问题**:配置导出不够完善
|
||
|
||
**实施**:
|
||
- 支持完整配置导出(包括密码)
|
||
- 支持配置导入验证
|
||
- 支持配置迁移
|
||
|
||
**文件修改**:
|
||
- `ConfigViewModel.kt`
|
||
- `ConfigScreen.kt`
|
||
|
||
**预期收益**:
|
||
- 用户迁移配置更方便
|
||
- 减少配置错误
|
||
|
||
---
|
||
|
||
## 实施顺序
|
||
|
||
### Week 1: Phase 1 - 基础优化
|
||
- [ ] 1.1 提取密码获取公共函数
|
||
- [ ] 1.2 应用信息缓存机制
|
||
- [ ] 1.3 批量 RootShell 调用优化
|
||
|
||
### Week 2: Phase 2 - 核心优化
|
||
- [ ] 2.1 增量备份优化
|
||
- [ ] 2.2 智能并发控制
|
||
- [ ] 2.3 Restic 增量备份优化
|
||
|
||
### Week 3: Phase 3 - 用户体验优化
|
||
- [ ] 3.1 进度显示优化
|
||
- [ ] 3.2 错误处理优化
|
||
- [ ] 3.3 恢复预览功能
|
||
|
||
### Week 4: Phase 4 - 高级优化
|
||
- [ ] 4.1 并行恢复优化
|
||
- [ ] 4.2 备份完整性校验
|
||
- [ ] 4.3 配置导入导出优化
|
||
|
||
---
|
||
|
||
## 风险评估
|
||
|
||
### 高风险
|
||
- **增量备份逻辑修改** - 可能导致数据丢失
|
||
- 缓解:充分测试,保留旧逻辑作为回退
|
||
|
||
### 中风险
|
||
- **并发控制调整** - 可能影响稳定性
|
||
- 缓解:渐进式调整,监控性能指标
|
||
|
||
### 低风险
|
||
- **缓存机制** - 可能导致数据不一致
|
||
- 缓解:实现缓存失效机制,支持手动刷新
|
||
|
||
---
|
||
|
||
## 测试策略
|
||
|
||
### 单元测试
|
||
- CredentialProvider 测试
|
||
- AppMetadataCache 测试
|
||
- BatchRootShell 测试
|
||
|
||
### 集成测试
|
||
- 完整备份流程测试
|
||
- 增量备份流程测试
|
||
- 恢复流程测试
|
||
|
||
### 性能测试
|
||
- 100 应用备份性能测试
|
||
- 增量备份性能测试
|
||
- 远程备份性能测试
|
||
|
||
### 用户验收测试
|
||
- 真实设备测试
|
||
- 用户场景测试
|
||
- 边界条件测试
|
||
|
||
---
|
||
|
||
## 预期成果
|
||
|
||
### 性能提升
|
||
- 首次完整备份:15分钟 → 10分钟 (33% 提升)
|
||
- 增量备份:3分钟 → 30秒 (83% 提升)
|
||
- 恢复操作:10分钟 → 6分钟 (40% 提升)
|
||
- 远程备份:30分钟 → 20分钟 (33% 提升)
|
||
|
||
### 代码质量
|
||
- 重复代码减少 60%+
|
||
- 单元测试覆盖率提升到 70%+
|
||
- 代码可维护性显著提升
|
||
|
||
### 用户体验
|
||
- 进度显示更详细
|
||
- 错误提示更友好
|
||
- 操作流程更顺畅
|
||
|
||
### 可靠性
|
||
- 备份成功率提升到 99%+
|
||
- 恢复成功率提升到 99%+
|
||
- 网络异常恢复能力增强
|