ReactNative踩坑:ReactInstanceEventListener内存泄漏

这里写图片描述

内存走查的时候发现,app退出后堆栈中存在两个闪屏页的Activity,如上图所示。

导出hprof文件后,重新用AndroidStudio打开,找到SplashActivity如下图:
这里写图片描述

选择蓝色的这一行Jump to Source

这里写图片描述

出现了如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void createContext() {
final ReactInstanceManager manager = getReactNativeHost().getReactInstanceManager();
if (!manager.hasStartedCreatingInitialContext()) {
manager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
@Override
public void onReactContextInitialized(ReactContext context) {
preLoadBussiness();
}
});
manager.createReactContextInBackground();
} else {
preLoadBussiness();
}
}

这段代码是监听ReactNative初始化,初始化完成后做一些事情。
至此大概就猜到是监听器没有反注册导致内存泄漏。

在Activity的OnDestroy或者preLoadBussiness之前进行反注册就解决了这个内存泄漏。