【问题标题】:React Native - android - Memory is not releasedReact Native - android - 内存未释放
【发布时间】:2019-01-08 18:56:37
【问题描述】:

我们有一个生产应用程序并使用“adb shell dumpsys meminfo”来测量内存。我们看到在这个工具中进行转储时内存在不断增长。我们看到未知类别正在增长并且从未下降。当我们附加调试器并执行 JS 内存快照时,我们看到内存在我们清理的地方下降。为了简化这一点,我们创建了一个简单的应用程序来在一个屏幕上分配和释放内存。在 chrome 调试器中,我们看到释放时内存下降;但是在没有调试器的设备/模拟器中运行时,内存正在拍摄并且即使我们解除分配也不会下降。某个时候应用程序崩溃了。看起来 JavaScript GC 从未运行。请参阅我们在下面发布的详细信息。由于这阻碍了我们的发布,我们恳请对此进行调查。为什么 RN app 内存一直在增加,app 崩溃了?”

我正在运行简单的 react 本机应用程序以了解内存使用情况。 当我使用 chrome 调试器检查内存时,它没有保留任何内存。但是当我使用 adb sysdump 检查内存时,jsthread 并没有释放内存。

我正在使用 react-navigation 在屏幕之间进行导航。我正在使用 createStackNavigator 方法。

我的组件名称是 screenOne。该组件包含添加记录的 AddRecord 方法。一旦我按下返回按钮,组件将被卸载并导航到 HomeScreen。

快照一 - 初始内存 - 主屏幕页面

快照二 - 导航到 screenOne 组件。

SnapShot 3 - 多次按下 addRecord 方法以增加内存。

快照四 - 导航回到主屏幕,内存已被释放

但是当我做 adb shell dumpsys meminfo - 内存没有被释放。

初始 - 内存

添加记录 - 增加内存

导航回到主屏幕 - 不释放内存

【问题讨论】:

  • 我也有同样的问题...
  • 我也有同样的问题,顺便说一句,使用一页状态也会增加内存

标签: android react-native memory memory-leaks react-native-android


【解决方案1】:

在屏幕之间导航时,react-navigation 不会关闭屏幕。按设计。如果您想在屏幕离开屏幕时进行清理,您可以附加 onFocus 和 onBlur 侦听器为 onScreen 设置布尔状态,并在渲染中键入它以在屏幕未显示时不显示任何内容。或者使用不同的导航系统。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-24
    • 2020-05-21
    • 2013-07-26
    • 2011-04-02
    • 2014-06-13
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多