React Native-Android-内存未释放

时间:2018-08-01 09:02:50

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

我们有一个生产应用程序,并使用“ adb shell dumpsys meminfo”来测量内存。我们看到在使用此工具进行转储时内存正在不断增长。我们看到“未知”类别正在增长,并且从未下降。当我们连接调试器并执行JS内存快照时,我们看到在我们清理的地方内存正在下降。为了简化此操作,我们创建了一个简单的应用程序,可以在一个屏幕中分配和取消分配内存。在chrome调试器中,当我们取消分配时,我们会看到内存减少;但是在没有调试器的设备/仿真器中运行时,内存正在射击,即使我们取消分配,内存也不会减少。应用程序崩溃了。看来JavaScript GC从未运行过。请查看我们在下面发布的详细信息。由于这阻碍了我们的发布,我们恳请对此进行调查。为什么RN应用程序内存总是增加而应用程序崩溃?”

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

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

enter image description here

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

enter image description here

SnapShot One-初始内存-主页屏幕页面

enter image description here

SnapShot Two-导航到screenOne组件。

enter image description here

SnapShot三-多次按下addRecord方法以增加内存。 enter image description here

SnapShot四-导航回到主屏幕,内存已释放 enter image description here

但是当我执行adb shell dumpsys meminfo时-内存未释放。

初始-记忆 enter image description here

添加记录-增加内存 enter image description here

导航回主屏幕-不释放内存 enter image description here

1 个答案:

答案 0 :(得分:0)

在屏幕之间导航时,

反应导航不会关闭屏幕。通过设计。如果您希望在屏幕外时进行清理,则可以附加onFocus和onBlur侦听器以为onScreen设置布尔状态,并在渲染器上键入该状态以在不显示屏幕时不显示任何内容。或使用其他导航系统。