android - React Native : AppState. addEventListener 在点击通知时在恢复时注册重复事件

标签 android react-native react-native-push-notification

我有一些代码想要在我的应用程序从后台恢复时运行。为此,我使用 AppState.addEventListener() 注册一个事件。

  const handleAppStateChange = () => {
    console.log('Do stuff')
  }

  constructor(props: Props) {
    super(props)
    AppState.addEventListener('change', this.handleAppStateChange)
  }

  componentWillUnmount() {
    AppState.removeEventListener('change', this.handleAppStateChange)
  }

当我正常退出应用程序并恢复时,它会按预期打印“do stuff”,但是(这就是问题),当应用程序最小化并且我点击通知时,应用程序将打印“Do stuff”两次。

我发现这是因为当我点击通知时,它似乎重新运行应用程序(包括构造函数部分),这意味着它创建了第二个事件监听器...

那么,有谁知道为什么在点击通知时会这样做,以及我是否可以阻止它(使用react-native-push-notification插件),或者是否有一种方法可以确保重复的事件是没有注册?

这发生在我的 Android 物理设备上,不确定这是否也是 iOS 问题,但我只是想检查一下是否有人知道这是否可能)

最佳答案

经过一番折腾,我终于找到了解决办法。这不是很好,但现在已经完成了工作。

if (AppState._eventHandlers.change.size === 0) {
  AppState.addEventListener('change', this.handleAppStateChange)
}

我感觉AppState页面https://facebook.github.io/react-native/docs/appstate ,严重不足,这就是为什么我现在能看到的唯一选择是这种私有(private)方法。如果可以改进的话,我们将尝试与团队跟进,因为在某些情况下,您不希望注册重复的事件是有道理的。

关于android - React Native : AppState. addEventListener 在点击通知时在恢复时注册重复事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482733/

相关文章:

javascript - 如何在 React-Native Expo 中特定位置的 ScrollView 内添加 float 操作按钮?

react-native - 安卓 : 'onNotification' not executing when app is closed and clicked to notification

java - fragment 和文本转语音以及幻灯片菜单

android - Webview 从 assets 目录加载所有 HTML 文件

android - 在 Android Google Maps API v2 中,交通数据显示在绘制的形状(多段线)上方

android - 如何处理Web服务异常

android - react 原生 firebase 与 expo 裸应用程序的集成

react-native - 尝试使用 'Animated' 使我的 SVG 元素旋转,但它不起作用

ios - 在模拟器和物理设备上都没有在 IOS 中获得本地通知