flutter_leak_detector:基于 Flutter 的内存泄漏检测工具项目

暂无描述

分支1Tags2
文件最后提交记录最后更新时间
update: 更新文件 developer Signed-off-by: c60089898 <2984202073@qq.com>1 个月前
upgrade Gradle plugin 2 年前
修改版权头 Signed-off-by: laoguanyao <806103474@qq.com> 1 年前
init oroject,0.1.0 4 年前
修改ohos系统的判断方式 Signed-off-by: huangxiaoyao <976125628@qq.com> 1 年前
support macos windows 4 年前
更新项目结构 Signed-off-by: huangxiaoyao <976125628@qq.com> 2 年前
dart format 4 年前
update .gitignore 4 年前
init oroject,0.1.0 4 年前
修改README.OpenHarmony.md和README.OpenHarmony_CN.md文件,增加CHANGELOG.OpenHarmony.md文件 Signed-off-by: dqh0334 <daiqinghui2@h-partners.com> 9 天前
upgrade dependencies 2 年前
补充COMMITTERS和README.OpenSource Signed-off-by: huangxiaoyao <976125628@qq.com> 1 年前
init oroject,0.1.0 4 年前
feat: 补充flutter_leak_detector约束与限制的兼容性,支持flutter ohos 3.35 Signed-off-by: wuleilei3 <wuleilei3@h-partners.com> Signed-off-by: tangyu70 <tangyu70@h-partners.com> 2 个月前
修改README.OpenHarmony.md和README.OpenHarmony_CN.md文件,增加CHANGELOG.OpenHarmony.md文件 Signed-off-by: dqh0334 <daiqinghui2@h-partners.com> 9 天前
修改README.OpenHarmony.md和README.OpenHarmony_CN.md文件,增加CHANGELOG.OpenHarmony.md文件 Signed-off-by: dqh0334 <daiqinghui2@h-partners.com> 9 天前
修改OAT.xml,新增READNE.OpenHarmony.md,修改README.OpenSource版本号. Signed-off-by: xuchang <xuchang@openvalley.net> 1 年前
update to fltter2.8 4 年前
修改OAT.xml,新增READNE.OpenHarmony.md,修改README.OpenSource版本号. Signed-off-by: xuchang <xuchang@openvalley.net> 1 年前
update to fltter2.8 4 年前
feat: 补充flutter_leak_detector约束与限制的兼容性,支持flutter ohos 3.35 Signed-off-by: wuleilei3 <wuleilei3@h-partners.com> Signed-off-by: tangyu70 <tangyu70@h-partners.com> 2 个月前
update .gitignore 4 年前
upgrade dependencies 2 年前
添加OHOS适配 Signed-off-by: zhuzhengjun <zhuzhengjun@talkweb.com.cn> 2 年前

内存泄漏检测工具

Flutter 内存泄漏检测工具

使用方法

初始化

为防止底层库 vm service 崩溃,请在添加内存泄漏检测对象前调用:

LeakDetector().init(maxRetainingPath: 300); //maxRetainingPath default is 300

启用泄漏检测会降低性能,且 Full GC 可能导致页面掉帧。
该功能由插件中的 assert 初始化,因此在 release 模式下构建时无需手动关闭。

检测方法

MaterialAppnavigatorObservers 中添加 LeakNavigatorObserver,它将自动检测页面 Widget 及其对应 Element 对象是否存在内存泄漏。若页面 Widget 为 StatefulWidget,其对应的 State 也会被自动检查。

import 'package:leak_detector/leak_detector.dart';

@override
Widget build(BuildContext context) {
  return MaterialApp(
    navigatorObservers: [
      //used the LeakNavigatorObserver
      LeakNavigatorObserver(
        shouldCheck: (route) {
          return route.settings.name != null && route.settings.name != '/';
        },
      ),
    ],
  );
}

获取泄漏信息

LeakDetector().onLeakedStream 可以注册你的监听器,并在检测到内存泄漏后通知对象的引用链。 LeakDetector().onEventStream 可以监听内部事件通知,例如 开始垃圾回收结束垃圾回收 等。

提供了一个引用链的预览页面。你只需添加以下代码。注意,Bulid Context 必须能够获取到 NavigatorState

import 'package:leak_detector/leak_detector.dart';

//show preview page
LeakDetector().onLeakedStream.listen((LeakedInfo info) {
  //print to console
  info.retainingPath.forEach((node) => print(node));
  //show preview page
  showLeakedInfoPage(navigatorKey.currentContext, info);
});

预览页面展示:

包含引用链节点的类信息、被引用属性信息、属性声明的源码以及源码位置(行号:列号)。

获取内存泄漏记录

import 'package:leak_detector/leak_detector.dart';

getLeakedRecording().then((List<LeakedInfo> infoList) {
  showLeakedInfoListPage(navigatorKey.currentContext, infoList);
});

*真机无法连接 vm_service 的问题

VM 服务通过 Dart 开发服务(DDS)提供扩展功能集,该服务会将本文档描述的所有核心 VM 服务 RPC 转发至真正的 VM 服务。

因此当我们连接电脑运行时,电脑端的 DDS 会先连接我们手机端的 vm_service,导致我们的 leak_detector 插件无法再次连接 vm_service

有两种解决方案:

  • 运行完成后断开电脑连接,此时最好重启应用。

    若手机安装的是已完成测试的包,则不存在上述问题,故该方法适合测试人员使用。

  • flutter run 后添加 --disable-dds 参数关闭 DDS。经测试,这不会对调试造成任何影响

    Android Studio 中可按如下方式配置。

Pull Request #80900 合并后,--disable-dds 已更名为 --no-dds

image

image

下载使用量

0

项目总下载次数(含Clone、Pull、 zip 包及 release 下载),每日凌晨更新

语言类型

Dart76.79%
ArkTS11.58%
TypeScript4.23%
Ruby3.49%
Swift2.05%