【发布时间】:2018-03-19 22:22:50
【问题描述】:
在 React Native documentation for integrating with Android 中,它包含了这个用于与 Android 集成的 sn-p:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setBundleAssetName("index.android.bundle")
.setJSMainModulePath("index")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.RESUMED)
.build();
mReactRootView.startReactApplication(mReactInstanceManager, "MyReactNativeApp", null);
setContentView(mReactRootView);
}
但是,当我按原样使用它时,我会得到 100% 的重现内存泄漏,这是由 ThemedReactContext 持有对 ReactRootView 的引用引起的,ReactRootView 持有对我的自定义活动的引用。
这是因为传递给ReactRootView 的构造函数的Context 参数是this,这是对我的自定义活动的引用。
相反,如果我这样做:
mReactRootView = new ReactRootView(getApplication());
我没有发现内存泄漏。
为新的 ReactRootView 更改我的上下文源是否安全,这是一个应该 a) 修复还是 b) 应该看到文档更改的错误?
【问题讨论】:
-
有趣的问题。你有什么发现吗?
-
确实是一个有趣的问题。我观察到同样的事情——取消 RN 对活动破坏的看法并没有帮助。这对我来说闻起来像个虫子;你应该考虑opening an issue。使用应用上下文作为解决方法似乎没有不良影响。
-
你找到什么了吗?
-
@esilver 你是如何测试这个内存泄漏的?我没有在较新的版本 (.61+) 中看到这种情况,但也许我没有正确测试。
-
也许这在较新的版本中有所改变。我的经验是,如果/当您的 Android 应用程序开始泄漏整个活动时,您将没有太多时间在整个应用程序崩溃之前,所以这是我泄漏的最初线索。一般来说,为了测试,我在 Activity 中的 onDestroy() 中放置一个断点,看看它是否在 Activity 关闭时被调用。
标签: java android react-native memory-leaks react-native-android