153 lines
6.6 KiB
Markdown
153 lines
6.6 KiB
Markdown
# 上下文
|
||
文件名:image_download_refactor_task.md
|
||
创建于:2024-12-19
|
||
创建者:AI
|
||
关联协议:RIPER-5 + Multidimensional + Agent Protocol (Conditional Interactive Step Review Enhanced)
|
||
|
||
# 任务描述
|
||
将FriendItemComponent中的图片下载功能重构到WebRequestManager中,做成公共的图片下载服务
|
||
|
||
# 项目概述
|
||
Unity微信小游戏项目,使用MotionFramework框架,包含好友系统功能。当前图片下载逻辑分散在FriendItemComponent中,需要统一到WebRequestManager中提供公共的图片下载服务。
|
||
|
||
---
|
||
*以下部分由 AI 在协议执行过程中维护*
|
||
---
|
||
|
||
# 分析 (由 RESEARCH 模式填充)
|
||
|
||
## 当前代码结构分析
|
||
|
||
### FriendItemComponent中的图片下载逻辑
|
||
- 位置:`Assets/Scripts/Component/FriendItemComponent.cs` 第93-156行
|
||
- 功能:异步下载用户头像,包含缓存机制
|
||
- 特点:
|
||
- 使用`UnityWebRequestTexture.GetTexture()`下载图片
|
||
- 静态字典缓存`imageCache`存储已下载的纹理
|
||
- 超时时间设置为10秒
|
||
- 包含完整的错误处理和日志记录
|
||
- 使用UniTask异步模式
|
||
|
||
### WebRequestManager现有功能
|
||
- 位置:`Assets/Scripts/Network/WebRequestManager.cs`
|
||
- 现有功能:
|
||
- 单例模式管理
|
||
- 支持GET/POST请求
|
||
- 请求队列管理
|
||
- 重试机制
|
||
- 超时处理
|
||
- 事件系统
|
||
- 异步UniTask支持
|
||
- 缺失功能:图片下载和纹理缓存
|
||
|
||
### 数据模型分析
|
||
- `FriendData`类包含`user_image`字段(头像URL)
|
||
- `UserInfo`类也包含`user_image`字段
|
||
- 项目中可能存在多个地方需要下载用户头像
|
||
|
||
### 依赖关系
|
||
- FriendItemComponent依赖UnityWebRequest、UniTask
|
||
- WebRequestManager已包含这些依赖
|
||
- 需要保持向后兼容性
|
||
|
||
## 技术约束
|
||
- 必须保持现有API的兼容性
|
||
- 需要支持UniTask异步模式
|
||
- 缓存机制需要线程安全
|
||
- 错误处理要完善
|
||
- 日志记录要统一
|
||
|
||
## 潜在影响范围
|
||
- FriendItemComponent需要修改调用方式
|
||
- 其他可能使用图片下载的组件
|
||
- 缓存管理策略
|
||
|
||
# 提议的解决方案 (由 INNOVATE 模式填充)
|
||
|
||
## 推荐方案:在WebRequestManager中添加图片下载功能
|
||
|
||
### 核心设计原则
|
||
1. **统一接口设计**:提供与现有HTTP请求类似的异步接口
|
||
2. **智能缓存管理**:实现LRU缓存策略,避免内存泄漏
|
||
3. **灵活配置**:支持自定义超时、重试等参数
|
||
4. **事件系统集成**:与现有事件系统无缝集成
|
||
5. **向后兼容**:保持FriendItemComponent现有调用方式不变
|
||
|
||
### 技术实现要点
|
||
- 使用LRU缓存替代简单字典
|
||
- 添加内存使用监控
|
||
- 提供缓存清理接口
|
||
- 支持UniTask异步接口和回调方式
|
||
- 支持取消操作
|
||
- 网络错误分类处理
|
||
- 图片格式验证
|
||
- 下载进度回调
|
||
|
||
# 实施计划 (由 PLAN 模式生成)
|
||
|
||
## 技术规范
|
||
|
||
**目标**:在WebRequestManager中添加公共的图片下载功能,重构FriendItemComponent使用新的公共接口。
|
||
|
||
**架构设计**:
|
||
1. 在WebRequestManager中添加图片下载相关的方法和数据结构
|
||
2. 实现智能缓存管理(LRU缓存策略)
|
||
3. 提供UniTask异步接口和回调接口
|
||
4. 修改FriendItemComponent使用新的公共接口
|
||
5. 保持向后兼容性
|
||
|
||
**文件修改范围**:
|
||
- `Assets/Scripts/Network/WebRequestManager.cs` - 添加图片下载功能
|
||
- `Assets/Scripts/Component/FriendItemComponent.cs` - 重构使用新的公共接口
|
||
|
||
**新增功能**:
|
||
- 图片下载异步方法
|
||
- LRU缓存管理
|
||
- 图片下载事件系统
|
||
- 缓存统计和清理功能
|
||
|
||
实施检查清单:
|
||
1. [在WebRequestManager中添加图片缓存相关的私有字段和配置参数, review:true]
|
||
2. [在WebRequestManager中添加图片下载的异步方法DownloadImageAsync, review:true]
|
||
3. [在WebRequestManager中添加图片下载的回调方法DownloadImage, review:true]
|
||
4. [在WebRequestManager中添加LRU缓存管理相关方法, review:true]
|
||
5. [在WebRequestManager中添加图片缓存清理和统计方法, review:true]
|
||
6. [在WebRequestManager中添加图片下载相关的事件定义, review:true]
|
||
7. [修改FriendItemComponent移除原有的图片下载逻辑, review:true]
|
||
8. [修改FriendItemComponent使用WebRequestManager的图片下载功能, review:true]
|
||
9. [测试验证重构后的功能正常工作, review:false]
|
||
10. [更新任务进度文档记录完成情况, review:false]
|
||
|
||
# 当前执行步骤 (由 EXECUTE 模式在开始执行某步骤时更新)
|
||
> 正在执行: "步骤1-8:WebRequestManager图片下载功能实现和FriendItemComponent重构" (审查需求: review:true, 状态: 初步实施完成)
|
||
|
||
# 任务进度 (由 EXECUTE 模式在每步完成后,以及在交互式审查迭代中追加)
|
||
* 2024-12-19
|
||
* 步骤:检查清单项目1-8 (审查需求: review:true, 状态:初步完成)
|
||
* 修改:
|
||
- 在WebRequestManager中添加了图片缓存相关字段和配置参数
|
||
- 添加了图片下载事件定义(OnImageDownloadCompleted, OnImageDownloadFailed)
|
||
- 实现了DownloadImageAsync异步方法和DownloadImage回调方法
|
||
- 实现了简单缓存管理(移除复杂的LRU策略)
|
||
- 修改FriendItemComponent移除原有图片下载逻辑和静态缓存
|
||
- 重构FriendItemComponent使用WebRequestManager的公共图片下载接口
|
||
- 简化了缓存管理方法,移除复杂的缓存统计功能
|
||
* 更改摘要:成功将图片下载功能从FriendItemComponent重构到WebRequestManager,实现了统一的图片下载服务,使用简单缓存策略和完整的事件系统
|
||
* 原因:执行计划步骤1-8的初步实施
|
||
* 阻碍:无
|
||
* 状态:等待后续处理(审查或直接确认)
|
||
* 2024-12-19
|
||
* 步骤:用户反馈简化缓存功能 (审查需求: review:true, 状态:用户子提示迭代)
|
||
* 修改:
|
||
- 移除了WebRequestManager中的复杂LRU缓存管理功能
|
||
- 简化图片下载功能,只保留核心的DownloadImageAsync和DownloadImage方法
|
||
- 移除了maxImageCacheSize配置参数和imageCacheOrder字段
|
||
- 移除了AddToCache、UpdateCacheOrder、RemoveOldestFromCache等复杂缓存方法
|
||
- 移除了ClearImageCache、GetImageCacheStats、IsImageCached、GetCachedImage等缓存管理方法
|
||
- 更新FriendItemComponent中的缓存管理方法,移除对已删除方法的调用
|
||
- 保留简单的Dictionary缓存机制
|
||
* 更改摘要:根据用户反馈简化了图片下载功能,移除了复杂的缓存管理,只保留核心的下载方法和简单缓存
|
||
* 原因:处理用户子提示"不需要那么多缓存方法,就一个下载图片的方法就行了"
|
||
* 阻碍:无
|
||
* 状态:等待后续处理(审查或直接确认)
|