Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android React Native ReactRootView应该使用活动还是应用程序上下文?_Java_Android_React Native_Memory Leaks_React Native Android - Fatal编程技术网

Java Android React Native ReactRootView应该使用活动还是应用程序上下文?

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()

在React Native中,它包含用于与Android集成的以下代码段:

@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()中放置了一个断点,并查看它是否在活动关闭时被调用。