
以分析模式启动应用是性能分析的前提。使用真机运行应用,避免模拟器与调试模式的干扰。通过Android Studio菜单栏选择Run→Profile ‘main.dart’,或命令行执行flutter run --profile启动应用。性能图层会在应用顶层展示GPU与UI线程的帧渲染情况,蓝色竖线代表正常帧,绿色竖线标记当前帧。
当性能图层GPU线程区域出现红色竖条,表明图形渲染耗时超过16ms。常见原因包括复杂图形渲染或缺乏缓存优化。
检测多视图叠加渲染
在MaterialApp中设置checkerboardOffscreenLayers: true,使用saveLayer的Widget会显示为棋盘格并闪烁。例如动态模糊导航栏会导致频繁图层刷新,可替换为普通AppBar减少GPU压力:
Scaffold(
appBar: AppBar(title: Text('Home'), backgroundColor: Colors.white),
body: ListView.builder(...),
);优化图像缓存
启用checkerboardRasterCacheImages检测未缓存的图像。通过RepaintBoundary包裹静态复杂Widget,促使引擎缓存其渲染结果:
RepaintBoundary(
child: Container(color: Colors.black, width: 10, height: 10),
);UI线程的红色竖条表明Dart代码执行超时。常见场景包括:
性能分析工具
使用Flutter DevTools的CPU Profiler录制执行过程,定位耗时函数。重点关注build方法、事件处理及动画计算等高频执行路径。
列表优化示例
对长列表使用ListView.builder的itemExtent指定项高度,或prototypeItem提供原型项,避免动态测量开销:
ListView.builder(
itemExtent: 56.0,
itemBuilder: (ctx, index) => ListTile(title: Text('Item $index')),
);build方法中执行耗时操作const构造函数减少Widget重建addRepaintBoundaryIsolate分流计算密集型任务通过结合性能图层与工具链分析,可系统性地定位并解决渲染性能瓶颈。