# 上下文 文件名: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缓存机制 * 更改摘要:根据用户反馈简化了图片下载功能,移除了复杂的缓存管理,只保留核心的下载方法和简单缓存 * 原因:处理用户子提示"不需要那么多缓存方法,就一个下载图片的方法就行了" * 阻碍:无 * 状态:等待后续处理(审查或直接确认)