内存走查的时候发现,app退出后堆栈中存在两个闪屏页的Activity,如上图所示。
导出hprof文件后,重新用AndroidStudio打开,找到SplashActivity如下图:
选择蓝色的这一行Jump to Source
出现了如下代码:
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之前进行反注册就解决了这个内存泄漏。