最近在处理flutter内存泄漏相关的代码。经过一番分析后发现是我通过FlutterJNI获取与VM通信的地址时错误调用FlutterJNI导致。
FlutterJNI flutterJNI = new FlutterJNI();
flutterJNI.attachToNative(false);
String url = FlutterJNI.getObservatoryUri();
在flutterJNI调用attachToNative()会导致flutter engine层重新构造一个Flutter mainIsolate,并且将其挂起。
这样app启动后,在observertaory中分析就会看到两个isolate main。在hot reload的时候,其中一个isolate由于是paused状态,所以导致向vm发送reload指令失败。
flutter启动流程分析见:https://www.jianshu.com/p/16366f318370
有空再详细写文章分析原因。