destroy
销毁小游戏运行环境
destroy() 是整个生命周期的终点。它用于彻底关闭游戏引擎,回收所有占用的系统资源(包括 JS 虚拟机内存、纹理资源、线程池以及 View 句柄)。调用此方法后,小游戏实例将回归到初始的不可用状态。
方法声明
java
/**
* 销毁小游戏运行环境。
* 操作成功后小游戏实例进入 `UNAVAILABLE` 状态。
* 调用后,当前 handle 绑定的所有资源将被释放,View 将失效。
*/
void destroy();运行行为与状态迁移
1. 前提条件
- 可以在
WAITING、RUNNING或PLAYING任何状态下调用。 - 建议在调用前先执行
stop()以确保游戏逻辑已经优雅地触发了onHide。
2. 执行过程
- 引擎卸载:关停内置的 JS 引擎(V8/JSC),清空所有脚本上下文。
- 内存释放:销毁 WebGL/Canvas 渲染表面,释放显存中的图片和模型数据。
- 监听解绑:自动解绑之前设置的各类状态和自定义指令监听器。
3. 结果
- 成功后,状态变为
GAME_STATE_UNAVAILABLE。 - 此时
getGameView()返回的 View 及其内容将被销毁,不可再次添加到 UI 树中。
代码示例
java
@Override
protected void onDestroy() {
if (gameHandle != null) {
// 1. 停止运行(可选,取决于是否需要触发游戏内部存档逻辑)
gameHandle.stop("{}");
// 2. 彻底销毁环境
gameHandle.destroy();
// 3. 将句柄置空,防止后续误用
gameHandle = null;
}
super.onDestroy();
}注意事项
- 不可逆性:一旦执行
destroy(),该gameHandle实例就完成了使命。如果需要再次玩游戏,必须重新从setGameStartOptions和create()开始完整流程。 - 内存泄漏预防:在 Activity 销毁时,务必调用此方法。如果不销毁,JS 引擎和渲染表面可能会导致严重的内存泄漏。
- 线程安全:
destroy()是一个重量级同步操作,建议在确认不再需要游戏画面时(如退出 Activity 的瞬间)立即执行。