Flutter性能监控插件fps_jank_flash_widget的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter性能监控插件fps_jank_flash_widget的使用

fps_jank_flash_widget 是一个Flutter小部件,当Flutter无法在特定时间内渲染帧时会闪烁。这有助于开发者检测并优化应用的性能瓶颈。

安装

在你的pubspec.yaml文件中添加依赖:

flutter pub add fps_jank_flash_widget
flutter packages get

使用

基本用法

首先,你需要设置帧预算(frame budget)。默认情况下,60帧每秒(fps)的帧预算为17毫秒。

import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

void main() {
  const frameBudget = Duration(milliseconds: 17); // 60 fps
  FPSJankFlash.frameBudget = frameBudget;

  runApp(FPSJankFlash.overlay(child: const MyApp()));
}

直接使用 FPSJankFlash 小部件

你可以在任何需要的地方直接使用FPSJankFlash小部件。例如,在一个包含其他小部件的堆叠布局中:

import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

class SomeWidget extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Stack(
      children: [
        Column(
          children: [
            /// 你的其他小部件
          ],
        ),
        const FPSJankFlash(),
      ]
    );
  }
}

使用 JankObserver 监听卡顿

你可以使用JankObserver来监听卡顿事件,并在发生卡顿时执行某些操作:

import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

void main() {
  JankObserver.addListener(() {
    print('jank detected');
  });

  runApp(const MyApp());
}

针对高刷新率屏幕调整帧预算

如果你的应用在高刷新率屏幕上运行,可以相应地调整帧预算:

import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

void main() {
  const refreshRate = 120;
  final budgetMs = 1000 ~/ refreshRate;
  FPSJankFlash.frameBudget = Duration(milliseconds: budgetMs);

  runApp(FPSJankFlash.overlay(child: const MyApp()));
}

示例代码

以下是一个完整的示例代码,展示了如何使用fps_jank_flash_widget插件:

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

void main() {
  const frameBudget = Duration(milliseconds: 17); // 60 fps
  FPSJankFlash.frameBudget = frameBudget;

  runApp(FPSJankFlash.overlay(child: const MyApp()));
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'FPS Jank Flash Widget Demo',
      home: Home(),
    );
  }
}

class Home extends StatefulWidget {
  const Home({Key? key}) : super(key: key);

  [@override](/user/override)
  State<Home> createState() => _HomeState();
}

final r = Random();

void sleep(int ms) {
  final start = DateTime.now();

  while (true) {
    final elapsed = DateTime.now().difference(start);
    if (elapsed.inMilliseconds >= ms) {
      break;
    }
  }
}

class _HomeState extends State<Home> {
  final controller = ScrollController()
    ..addListener(() {
      if (r.nextInt(100) < 10) {
        sleep(60);
      }
    });

  final list = List.generate(1000, (index) => 'Item $index');

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: ListView.builder(
        controller: controller,
        itemCount: list.length,
        itemBuilder: (context, index) {
          final item = list[index];
          return ListTile(title: Text(item));
        },
      ),
    );
  }
}

更多关于Flutter性能监控插件fps_jank_flash_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter性能监控插件fps_jank_flash_widget的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是如何在Flutter项目中使用fps_jank_flash_widget插件进行性能监控的示例代码。这个插件可以帮助你监控应用的帧率(FPS)和卡顿情况(janks),并在界面上以视觉方式显示出来。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加fps_jank_flash_widget的依赖:

dependencies:
  flutter:
    sdk: flutter
  fps_jank_flash_widget: ^最新版本号  # 请替换为实际发布的最新版本号

然后运行flutter pub get来获取依赖。

2. 导入并使用插件

在你的Flutter应用的根dart文件中(通常是main.dart),导入fps_jank_flash_widget并使用它。

import 'package:flutter/material.dart';
import 'package:fps_jank_flash_widget/fps_jank_flash_widget.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('FPS & Jank Monitor'),
        ),
        body: FPSJankFlashWidget(
          child: MyHomePage(),
          // 可选配置
          fpsTextStyle: TextStyle(color: Colors.green, fontSize: 16),
          jankTextStyle: TextStyle(color: Colors.red, fontSize: 16),
          showFPS: true,  // 是否显示FPS
          showJank: true, // 是否显示Jank
          jankThreshold: 16.0, // Jank的阈值,单位为毫秒
        ),
      ),
    );
  }
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text(
            'You have pushed the button this many times:',
          ),
          Text(
            '0',
            style: Theme.of(context).textTheme.headline4,
          ),
        ],
      ),
    );
  }
}

3. 运行应用

现在你可以运行你的Flutter应用,并看到性能监控的视觉效果。如果应用的帧率低于60 FPS或者出现卡顿(超过设定的阈值),FPSJankFlashWidget会在界面上显示相关信息。

注意事项

  • fps_jank_flash_widget是一个实用的工具,但不建议在生产环境中使用,因为它可能会引入额外的UI元素和性能开销。
  • 你可以根据需要调整jankThreshold的值,以匹配你的应用对卡顿的敏感度。
  • 插件的更新可能会引入新的配置选项和功能,因此建议定期查看插件的文档和更新日志。

这样,你就能够在Flutter应用中集成并使用fps_jank_flash_widget进行性能监控了。

回到顶部