我正在尝试Flutter,我的应用程序在模拟器和真实设备上响应非常慢。我得到像这样的警告
跳过51帧!应用程序可能在其上做了太多工作 主线。
我知道Dart是一种单线程编程语言,在Android中我曾经用异常的旧new Thread();
块来解决这个问题。我试图在Flutter中应用相同的内容,然后通过Future
await
async
和各种类型进行阅读,但是当您从互联网上读取数据时,这些示例似乎正在解决。我的应用程序在这个阶段没有在线阅读任何内容,当我的屏幕有进度对话框,当我打开一个新的屏幕/页面,以及应用程序上的每个动画时,我都会跳过X帧。以下是我遇到问题的课程示例:
_buildContent(){
return new Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
new InkWell(
onTap: (){
Navigator.push(context, new MaterialPageRoute(builder:
(context) => new LoginScreen()));
},
child: new Container(
height: 150.0,
width: 150.0,
child: new Image.asset("images/logo.png", fit: BoxFit.cover,),
),
),
new Container(
margin: const EdgeInsets.all(16.0),
child: new CircularProgressIndicator(
value: null,
strokeWidth: 1.0,
valueColor: new AlwaysStoppedAnimation<Color>(
Colors.white
)
),
)
],
);
}
我假设跳过的x帧警告是由进度对话框引起的?我有另一个屏幕(登录屏幕),在打开时将小部件动画到位,动画移动得如此之慢,我可以逐字地看到每个帧都被渲染。是否有在线教程可以帮助解决这个问题或者只是了解Dart的异步编程?
答案 0 :(得分:6)
调试版本存在一些性能问题,因为许多声明和其他验证都发生在发行版本中。 发布版本比调试版本要快得多。
在发行版本中运行应用可能会有所帮助。 尝试在发布模式下运行
flutter run --release
答案 1 :(得分:3)
您应该看一下Flutter performance Profiling指南。您可以尝试使用其他配置来诊断问题是否在
中即使您的Dart代码仅在Ui线程中运行,也会影响其他代码。
答案 2 :(得分:3)
调试模式
因为调试模式具有热重载。
创建发行版APK https://flutter.io/docs/deployment/android
时您可以找到
编辑
https://flutter.io/docs/testing/ui-performance#debug-flags
调试模式可启用其他不在配置文件或发行版本中运行的检查(例如断言),这些检查可能会很昂贵。 调试模式还以与释放模式不同的方式执行代码。调试版本会在应用运行时“及时”(JIT)编译Dart代码,但是在将应用加载到应用之前,配置文件和发布版本已预先编译为本地指令(也称为“提前”或AOT)装置。 JIT可能会导致应用暂停以进行JIT编译,这本身可能会导致垃圾邮件。
https://github.com/flutter/flutter/wiki/Flutter%27s-modes
设备(包括模拟器,仿真器)上的调试模式:打开世界上所有的断言,包括所有调试信息,启用所有调试器帮助(例如天文台)和服务扩展。优化以加快开发/运行周期。没有针对执行速度,二进制大小或部署进行优化。由扑动运行使用。使用sky / tools / gn --android或sky / tools / gn --ios构建。有时也称为“检查模式”或“慢速模式”。
答案 3 :(得分:2)
在flutter中存在一个已知问题,您必须首先“预热”图形api(SkSL)。第三次运行后,通常动画将变得平滑。
该问题在iOS和Android上均会发生。
对于iSO,通常金属api中的滞后点是苹果放弃了对OpenGL的支持,而OpenGL通常是在实现skia图形引擎的地方。
此页面上有解决方法和临时解决方案。
答案 4 :(得分:0)
我的应用在某些android设备上运行缓慢,可能对其他设备也有一些性能影响。罪魁祸首是图像资产。提供正确的图像尺寸后,
true
到我的资产文件夹并更新pubspec.yaml,性能得到改善,
mdpi = 1x
hdpi = 1.5x
xhdpi = 2.0x
xxhdpi = 3.0x
xxxhdpi = 4.0x
答案 5 :(得分:0)
iOS模拟器
如果您遇到速度慢,FPS低,在Xcode模拟器中在特定(较新)设备上滚动滞后 ,因为苹果放弃了对OpenGL的支持,而Flutter SDK不支持新的Metal API 在模拟器中。
但是官方稳定支持即将推出,直到需要60 FPS时,通过在终端上运行Flutter SDK的主通道并重新构建应用程序即可:
flutter channel master
来源:
iOS Simulator gradually becomes very slow & unusable
Investigate enabling Metal on iOS simulators above version 13.0.
答案 6 :(得分:-1)
尝试在终端中使用flutter run --release
以发布模式运行您的应用。
答案 7 :(得分:-2)
以前,我认为在Xcode中运行iOS模拟器非常慢,现在我来了Flutter,然后看到了新记录!我无法想象Flutter会那么慢。如上所述,我使用发布模式运行它,尽管要花5分钟在真实的iPhone中启动一个简单的todoList应用...