Javascript React Native BackHandler始终关闭Android中的应用程序(硬件备份)
我正在使用Javascript React Native BackHandler始终关闭Android中的应用程序(硬件备份),javascript,android,react-native,redux,react-navigation,Javascript,Android,React Native,Redux,React Navigation,我正在使用reduxv5.0.5和react-navigation v1.0.0-beta.11构建一个带有react-native v0.44.0的应用程序。路由通过嵌套的导航器、一个主堆栈导航器和抽屉导航器完成。 我在导航减缩器中处理所有导航事件,同时在Android上使用BackHandler进行硬件反压。现在是奇怪的部分(对我来说),我实现了BackHandler事件处理程序,如下所示: import { BackHandler, Modal, View } from 'react-na
reduxv5.0.5
和react-navigation v1.0.0-beta.11
构建一个带有react-native v0.44.0
的应用程序。路由通过嵌套的导航器、一个主堆栈导航器和抽屉导航器完成。我在导航减缩器中处理所有导航事件,同时在Android上使用BackHandler进行硬件反压。现在是奇怪的部分(对我来说),我实现了BackHandler事件处理程序,如下所示:
import { BackHandler, Modal, View } from 'react-native';
import { NavigationActions } from 'react-navigation';
import { HARDWARE_BACK_PRESS } from '../helpers/NavTypes';
constructor(props) {
super(props);
this.handleBack = this.handleBack.bind(this);
}
componentWillMount() {
BackHandler.addEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}
componentWillUnmount() {
BackHandler.removeEventListener(HARDWARE_BACK_PRESS, this.handleBack);
}
handleBack() {
const navAction = NavigationActions.back();
this.props.navigation.dispatch(navAction);
return true;
}
在我的导航减速器中,我正在处理导航/返回
操作类型,并跟踪我的状态。现在,当我在Android设备上或在emulator中按下hardware back(硬件后退)按钮时,由于redux logger
和React Native debugger(反应本机调试器),我可以看到导航操作已正确调度,并显示上一个屏幕,但应用程序仍然关闭。当我将handleBack
方法更改为以下内容时,也会发生这种情况:
handleBack() {
return true;
}
每次按下硬件后退按钮时,应用程序仍会关闭。我在RCTDeviceEventEmitter.addListener
内部的node\u modules/react native/Libraries/Utilities/BackHandler.android.js
中进行了一些步骤调试,我可以看到我的事件侦听器已注册,并且在循环中invokeDefault
设置为true
addListener
已退出,但应用程序仍将关闭。有人知道导航和redux是否在某个我不知道的顶层覆盖了硬件后退按钮的行为吗?我已经在没有react导航和redux的情况下设置了第二个纯RN项目,实现了相同的BackHandler事件侦听器(也返回true),并且应用程序不会关闭。所以,现在这让我有点困惑。我正在使用react导航,并且我还处理操作系统的后退按钮。这对我来说很好。 也许你可以试试这个。请注意,如果您正在执行除关闭应用程序以外的任何其他任务,handleBack必须返回true。如果没有,它将立即关闭应用程序
componentWillMount() {
BackHandler.addEventListener(HARDWARE_BACK_PRESS, () => { return this.handleBack.bind(this)() });
}
我也有同样的问题,返回
true
不会更新。更改后再次运行react native run android
。Hi@csath,谢谢您的回答。但这并没有改变任何事情。正如我所说,我甚至可以更改handleBack
以始终返回true
,并且应用程序仍将关闭。我不知道在这个过程中我可以在哪里更深入地探索这个问题。现在我正在阅读adb logcat日志,看看是否有任何关于“否决”硬件反压的暗示。我也面临着同样的问题,它对你有用吗?@Anjana Systemaix是onest,在该项目中,我们更新了一个更新的react native
,redux
和react导航
版本,现在一切正常。但我已经用旧模块创建了该项目的一个分支,问题仍然存在,只要我有一些空闲时间,我会尝试找出该实现的错误。我的问题通过Victoriayangx在本链接中给出的解决方案得到了解决