Flutter性能监控插件x_apm的使用
Flutter性能监控插件x_apm的使用
介绍
XPM SDK 能够全面监控Flutter端线上稳定性和性能的运行情况。目前SDK提供以下功能:
- 页面FPS监控
- 网络监控
- 页面性能监控(FP、FCP、FMP)
- Flutter/Dart 错误监控
使用
首先需要导入 x_apm
包并初始化插件。
import 'package:x_apm/x_apm.dart';
void main() {
XApmManager.instance.init(
config: ApmConfig(
// 是否使用性能监控
enable: true,
handlers: [FloatWindowHandler(globalKey)],
endpoint:
"https://hyperf.debug.591.com.hk/api/flutter/apm/save-record"));
// 开启网络监控
HttpOverrides.global = ApmHttpOverrides();
// 错误收集
XApm(appRunner: () => runApp(const MyApp()));
}
在 MyApp
类中设置 navigatorKey
和 navigatorObservers
以启用路由监控。
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
navigatorKey: globalKey,
routes: generateRoutes(),
theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: false),
// 添加路由监控
navigatorObservers: [ApmNavigatorObserver.instance],
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
配置
X-APM支持以下配置选项:
/// 是否启用
final bool enable;
/// 打印器列表
final List<PrintlnHandler> handlers;
/// 上传地址
final String endpoint;
/// 用于外界筛选需要上传的数据,返回true则进行上传,false不上传
final bool Function(Data data)? filterFunction;
/// 用于外界对数据进行转换
final Transformer Function() transformer;
/// 用于外界对数据进行发送
final Sender Function() sender;
/// 用于外界自定义http请求
final http.Client Function() httpClient;
/// 发送数据的网络策略
final NetworkType networkTypePolicy;
/// 两次数据发送的最小时间间隔,单位毫秒
final int flushInterval = 15;
/// 本地缓存日志的最大条目数
final int flushBulkSize = 15;
完整示例代码
import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:x_apm/x_apm.dart';
import 'package:x_apm_example/common/router.dart';
import 'package:x_apm_example/widgtes.dart';
GlobalKey<NavigatorState> globalKey = GlobalKey<NavigatorState>();
void main() {
XApmManager.instance.init(
config: ApmConfig(
enable: true,
handlers: [FloatWindowHandler(globalKey)],
endpoint:
"https://hyperf.debug.591.com.hk/api/flutter/apm/save-record"));
HttpOverrides.global = ApmHttpOverrides();
XApm(appRunner: () => runApp(const MyApp()), ensureInitialized: true);
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
navigatorKey: globalKey,
routes: generateRoutes(),
theme: ThemeData(primarySwatch: Colors.blue, useMaterial3: false),
navigatorObservers: [ApmNavigatorObserver.instance],
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('通用版首页'),
actions: <Widget>[
IconButton(
icon: const Icon(Icons.settings),
tooltip: 'Setting',
onPressed: () => Navigator.of(context).pushNamed('/setting'),
),
],
),
body: Center(
child: ListView(
padding: const EdgeInsets.only(left: 16.0, right: 16.0, top: 8.0, bottom: 8.0),
children: <Widget>[
buildEntryButton(context, '异常测试', '/error_test'),
buildEntryButton(context, '页面路由跳转测试', '/navigator_test/first_page'),
buildEntryButton(context, '设备信息', '/navigator_test/device_info_page'),
buildEntryButton(context, '网络测试', '/navigator_test/network_page'),
],
),
),
);
}
}
更多关于Flutter性能监控插件x_apm的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter性能监控插件x_apm的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
x_apm
是一个用于 Flutter 应用的性能监控插件,可以帮助开发者监控应用的性能指标,如 FPS(帧率)、内存使用、CPU 使用率、网络请求等。通过使用 x_apm
,开发者可以更好地了解应用的性能瓶颈,并进行优化。
1. 安装 x_apm
插件
首先,你需要在 pubspec.yaml
文件中添加 x_apm
依赖:
dependencies:
flutter:
sdk: flutter
x_apm: ^0.1.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 x_apm
在你的 Flutter 应用的入口文件(通常是 main.dart
)中,初始化 x_apm
:
import 'package:flutter/material.dart';
import 'package:x_apm/x_apm.dart';
void main() {
// 初始化 x_apm
XApm.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
3. 监控性能指标
x_apm
提供了多种性能监控功能,你可以根据需要选择使用。
3.1 监控 FPS(帧率)
XApm.startFpsMonitor();
3.2 监控内存使用
XApm.startMemoryMonitor();
3.3 监控 CPU 使用率
XApm.startCpuMonitor();
3.4 监控网络请求
XApm.startNetworkMonitor();
4. 查看监控数据
你可以通过 XApm
提供的 API 来获取监控数据:
// 获取 FPS 数据
double fps = XApm.getFps();
// 获取内存使用数据
MemoryInfo memoryInfo = XApm.getMemoryInfo();
// 获取 CPU 使用率
double cpuUsage = XApm.getCpuUsage();
// 获取网络请求数据
List<NetworkInfo> networkInfoList = XApm.getNetworkInfo();
5. 停止监控
如果你不再需要监控,可以停止相应的监控功能:
XApm.stopFpsMonitor();
XApm.stopMemoryMonitor();
XApm.stopCpuMonitor();
XApm.stopNetworkMonitor();
6. 集成到开发工具
x_apm
还提供了与 Flutter 开发工具的集成功能,你可以将监控数据实时显示在 Flutter DevTools 中,方便调试和分析。
7. 注意事项
x_apm
是一个轻量级的性能监控工具,适合在开发和测试阶段使用。在生产环境中,建议根据实际需求选择合适的性能监控工具。- 使用
x_apm
时,注意监控的频率和范围,避免对应用性能产生过大的影响。
8. 示例代码
以下是一个完整的示例代码,展示了如何使用 x_apm
监控 FPS、内存、CPU 和网络请求:
import 'package:flutter/material.dart';
import 'package:x_apm/x_apm.dart';
void main() {
XApm.init();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
double fps = 0;
MemoryInfo memoryInfo = MemoryInfo();
double cpuUsage = 0;
List<NetworkInfo> networkInfoList = [];
[@override](/user/override)
void initState() {
super.initState();
XApm.startFpsMonitor();
XApm.startMemoryMonitor();
XApm.startCpuMonitor();
XApm.startNetworkMonitor();
// 定时获取监控数据
Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
fps = XApm.getFps();
memoryInfo = XApm.getMemoryInfo();
cpuUsage = XApm.getCpuUsage();
networkInfoList = XApm.getNetworkInfo();
});
});
}
[@override](/user/override)
void dispose() {
XApm.stopFpsMonitor();
XApm.stopMemoryMonitor();
XApm.stopCpuMonitor();
XApm.stopNetworkMonitor();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Performance Monitoring'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('FPS: ${fps.toStringAsFixed(2)}'),
Text('Memory: ${memoryInfo.usedMemory} / ${memoryInfo.totalMemory}'),
Text('CPU Usage: ${cpuUsage.toStringAsFixed(2)}%'),
Text('Network Requests: ${networkInfoList.length}'),
],
),
),
);
}
}