Skip to content

preStartGame

预启动游戏(通过游戏 ID)

preStartGame 是启动流程中的最强优化手段。它在 preLoad 的基础上更进一步:不仅加载资源和初始化引擎,还会模拟游戏启动的完整生命周期(除了将视图显示出来)。

通过此接口,游戏会在内存中完成首屏的所有逻辑计算。当用户最终调用 startGame 时,SDK 只是将已经渲染好的画面“贴”到屏幕上,实现真正的零延迟瞬开


方法声明

java
/**
 * 预启动游戏,根据游戏 ID
 *
 * @param gameID   游戏 ID 
 * @param listener 预启动状态监听器
 * @return SUDOPGameTask 任务句柄,用于管理预启动的游戏实例
 */
public static SUDOPGameTask preStartGame(
    String gameID, 
    SUDOPPreStartGameListener listener
);

参数说明

属性类型描述
gameIdString必填。需要预启动的游戏唯一标识。

SUDOPPreStartGameListener

用于接收预启动结果的回调接口:

  • void onSuccess(String gameId, SUDRTGameHandle handle):预启动成功。此时游戏逻辑已在后台运行,处于“热启动”就绪状态。
  • void onFailure(int retCode, String retMsg):预启动失败。

运行行为

  1. 完整链路加载:包含下载、解压、Runtime 初始化、JS 脚本执行。
  2. 业务逻辑激活:游戏会执行 onLoadonStart 逻辑,加载首屏地图、配置及网络协议。
  3. 静默渲染:在内存缓冲区中完成首屏帧的渲染绘制,但不会占用物理屏幕。
  4. 资源独占:由于游戏已处于运行状态,它会占用较高的 CPU 和内存资源。

代码示例

java
SUDOPGameTask preStartTask = SUDOP.preStartGame("game_101", new SUDOPPreStartGameListener() {
    @Override
    public void onSuccess(String gameId, SUDRTGameHandle handle) {
        // 预启动成功,此时游戏已在后台跑起来了
        Log.i("SUDOP", "Game pre-started and running in background.");
        // 建议保存 handle,启动时使用 handle.getGameView()
    }

    @Override
    public void onFailure(int retCode, String retMsg) {
        // 预启动失败
        Log.e("SUDOP", "Pre-start failed: " + retMsg);
    }
});

注意事项

  • 性能开销preStart 是资源消耗最大的预处理操作。严禁同时预启动多个游戏,否则极易触发系统 OOM(内存溢出)。
  • 音频处理:预启动期间,SDK 默认会静音处理,直到游戏视图正式挂载。
  • 及时销毁:如果用户取消进入游戏或退出相关页面,必须调用 preStartTask.destroy(),否则游戏进程将一直在后台运行并消耗电池。