Skip to content

setGameQueryExitListener

设置小游戏退出请求监听器

setGameQueryExitListener 用于接管小游戏的退出逻辑。当玩家在游戏内点击“返回”按钮、点击游戏自定义的退出 UI,或者触发了某些导致小游戏申请结束运行的逻辑时,SDK 会通过此接口询问宿主 App 的处理意见。

如果不设置此监听器,SDK 的默认行为通常是直接关闭并清理小游戏。


方法声明

java
/**
 * 设置小游戏退出请求监听器
 * 若确认退出,需在回调中调用 destroy 退出小游戏。
 * 若不设置回调,则小游戏申请退出时直接退出。
 *
 * @param listener 退出请求监听器
 */
void setGameQueryExitListener(SUDRTGameHandle.GameQueryExitListener listener);

内部接口定义

java
public interface GameQueryExitListener {
    /**
     * 小游戏请求退出时调用
     *
     * @param appId  小游戏唯一性标识
     * @param result 请求退出的附带文本信息(例如 JS 层传入的提示语)
     */
    void onQueryExit(String appId, String result);
}

运行行为

  1. 拦截机制:设置此监听器后,App 获得了对“退出动作”的拦截权。引擎会暂停当前退出流程,等待 App 的指令。
  2. 二次确认:最常见的用途是弹出原生对话框,询问用户“是否确认退出游戏?进度可能丢失”。
  3. 显示销毁注意,在回调中,如果 App 确认要关闭游戏,**必须手动调用 gameHandle.destroy()**。如果不调用,游戏将保持在当前状态。

代码示例

java
gameHandle.setGameQueryExitListener(new SUDRTGameHandle.GameQueryExitListener() {
    @Override
    public void onQueryExit(String appId, String result) {
        // 切换到主线程弹出对话框
        runOnUiThread(() -> {
            new AlertDialog.Builder(MainActivity.this)
                .setTitle("退出提示")
                .setMessage("您确定要离开游戏吗?")
                .setPositiveButton("确定", (dialog, which) -> {
                    // 1. 停止并销毁游戏实例
                    gameHandle.stop("{}");
                    gameHandle.destroy();
                    
                    // 2. 关闭当前 Activity 或移除 View
                    finish();
                })
                .setNegativeButton("取消", (dialog, which) -> {
                    // 用户反悔,不执行任何操作,游戏继续运行
                })
                .show();
        });
    }
});

注意事项

  • 必须手动 Destroy:设置监听器后,SDK 不再自动关闭游戏。开发者若在 onQueryExit 中没有任何动作,游戏将“卡”在退出前的最后画面。
  • 参数 result:该参数通常包含 JS 层传递过来的上下文(如退出原因),可以根据此内容展示不同的提示语。
  • 物理返回键屏蔽:如果您的 Activity 捕获了系统的 onBackPressed,建议在逻辑内部也调用 gameHandle.stop() 等操作,或者与此监听器的逻辑进行整合。