Java Android React Native ReactRootView应该使用活动还是应用程序上下文?
在React Native中,它包含用于与Android集成的以下代码段:Java Android React Native ReactRootView应该使用活动还是应用程序上下文?,java,android,react-native,memory-leaks,react-native-android,Java,Android,React Native,Memory Leaks,React Native Android,在React Native中,它包含用于与Android集成的以下代码段: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mReactRootView = new ReactRootView(this); mReactInstanceManager = ReactInstanceManager.builder()
@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%的复制内存泄漏,这是由于上下文
包含对ReactRootView
的引用,该引用包含对我的自定义活动的引用
这是因为传递给ReactRootView
的构造函数的Context
参数是This
,它是对我的自定义活动的引用
相反,如果我这样做:
mReactRootView = new ReactRootView(getApplication());
我没有内存泄漏
为新的ReactRootView更改我的上下文的源是否安全?这是一个错误,应该a)修复还是b)查看文档更改?看起来上下文仅用于初始化
框架布局。从技术上讲,传入应用程序上下文将有助于避免内存泄漏,但是样式可能会混乱,因为“膨胀将使用运行系统的默认主题,而不是应用程序中定义的主题。”
请参见不同上下文功能。有趣的问题。你在这方面发现了什么吗?确实是个有趣的问题。我观察到同样的情况——卸载关于活动销毁的RN视图没有帮助。这闻起来像虫子;你应该考虑一下。使用应用程序上下文作为解决方案似乎没有不良影响。您在这方面发现了什么吗?@esilver您是如何测试内存泄漏的?在较新的版本(.61+)中,我没有看到这种情况发生,但可能我没有正确地进行测试。可能在较新的版本中发生了更改。我的经验是,如果/当你的Android应用程序开始泄漏整个活动时,在整个应用程序崩溃之前,你不会有太多时间,所以这是我泄漏的最初线索。通常,为了进行测试,我在活动的ondestory()中放置了一个断点,并查看它是否在活动关闭时被调用。