任务管理
SUDOPGameTask 是SDK中负责长耗时异步任务生命周期控制的类。允许 App 对正在进行的后台操作(如游戏包下载、环境预热、资源解压等)进行按需操作进行对任务终止并释放资源。通过该类,开发者可以比较灵活按需有效解决异步任务导致的内存泄漏或带宽浪费问题。
核心管理机制
1. 任务句柄化 (Task Handle)
当 App 调用 SDK 的异步接口(例如 preloadGame:)时,SDK 会立即返回一个实现 SUDOPGameTask 协议的对象。
- 内部管理:内部会持有任务并维护,确保执行任务得到完整执行。
- 即时返回:即便任务还在网络请求阶段,句柄也会先行返回给 App 持有。
- 唯一标识:每个句柄对应一个独立的任务实例,互不干扰。
2. 生命周期受控 (Controlled Lifecycle)
任务不再是“发出去就不管”的逻辑,App 拥有最终裁定权:
- 主动终结:通过调用
destroy方法,App 可以随时掐断任务。 - 资源对齐:任务的生命周期应与 App 的 UI 组件(如
Activity)对齐,确保“界面关,任务停”。
运行行为
- 状态截断:一旦执行管理指令(销毁),SDK 内部的状态机会立即标记任务为
Cancelled。 - I/O 释放:
- 网络层:立即断开正在下载的数据流,停止占用带宽。
- 磁盘层:停止写入临时文件,并清理未完成的碎片。
- 内存层:释放预加载到内存中的纹理、模型或音频缓冲区。
- 回调闭环:任务被管理销毁后,原有的“成功”回调将不再触发,避免了在页面销毁后执行 UI 更新导致的崩溃(Bad Access)。
注意事项
- 内存管理:
如果调用接口存在监听回调时,建议将持有该对象并在必要时刻调用
destroy进行销毁任务。这是确保实例被及时回收的最佳实践,防止因强引用导致内存泄漏;如果不想关心任务句柄,则可以将监听设置为空,避免因监听回调强持有相关实例引起内存泄漏问题。
- 幂等性:该方法支持多次调用。若任务已经销毁,再次调用
destroy不会产生副作用或引发崩溃。 - 独立性:
destroy仅针对当前 Task 句柄代表的任务。它不会停止已经运行的游戏实例或影响全局 SDK 的状态。