Cocos2d-x 3.4 安卓返回键会一直向上传递问题

.h
// 方法声明
virtual void onKeyReleased(EventKeyboard::KeyCode keyCode, Event* event);
void doBackOperation();

.cpp
// init()中注册真机监听
auto listener = EventListenerKeyboard::create();
listener->onKeyReleased = CC_CALLBACK_2(HelpLayer::onKeyReleased, this);
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);

// 返回键回调
void onKeyReleased(EventKeyboard::KeyCode keycode, cocos2d::Event *event){
switch (keycode){
case cocos2d::EventKeyboard::KeyCode::KEY_BACKSPACE:
case cocos2d::EventKeyboard::KeyCode::KEY_BACK:
// 返回操作
break;
default:
break;
}
}

这样写是可以收到安卓按下返回键的回调。但是每个界面都注册了监听,只要一按下返回键直接就回到最开始的界面(安卓回调会一直向上传递),不能达到预想方式:按一下安卓返回键,就只传递一次。
例如:大厅 -> 房间选择 -> 帮助弹框。房间选择界面和帮助弹框界面都注册了安卓返回,在帮助弹框界面按一下返回键就直接退回到大厅。手动点击帮助界面上的“返回”按钮不会出现此问题。
请问各位大神,这个问题怎么解决?

:sleepy: = =用个bool 记录下…

自己做个历史访问记录,只要一个返回侦听。 每次返回上一级。
或者
仍然是一个返回侦听,然后每次都去掉用当前模块的一个back接口
因为有的模块可以直接返回,然后就可以返回到上一层,
有些模块则必须要完成某些设置或引导 就可以不返回 在每个模块里可以自己控制,,

这两个方法都可以 看你的具体业务需求 我做H5的时候用第一种
做APP和游戏的时候用第二种。