颤动app慢

时间:2018-05-09 13:50:18

标签: dart flutter

我正在尝试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的异步编程?

8 个答案:

答案 0 :(得分:6)

调试版本存在一些性能问题,因为许多声明和其他验证都发生在发行版本中。 发布版本比调试版本要快得多。

在发行版本中运行应用可能会有所帮助。 尝试在发布模式下运行

flutter run --release

答案 1 :(得分:3)

您应该看一下Flutter performance Profiling指南。您可以尝试使用其他配置来诊断问题是否在

  • 平台线程
  • UI线程
  • GPU线程或
  • I / O线程。

即使您的Dart代码仅在Ui线程中运行,也会影响其他代码。

答案 2 :(得分:3)

调试模式

  • 启动缓慢
  • 启动时闪烁
  • 应用大小很大。

因为调试模式具有热重载。

创建发行版APK https://flutter.io/docs/deployment/android

您可以找到

  • 快速午餐
  • 启动时不闪烁
  • 应用尺寸小(但比普通的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图形引擎的地方。

此页面上有解决方法和临时解决方案。

Extreme jank on iOS/Android the first time any kind of animation or transition runs (release build) - skia shader compilation #61450

答案 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.

Will Flutter use Metal on iOS Simulators?

答案 6 :(得分:-1)

尝试在终端中使用flutter run --release以发布模式运行您的应用。

答案 7 :(得分:-2)

以前,我认为在Xcode中运行iOS模拟器非常慢,现在我来了Flutter,然后看到了新记录!我无法想象Flutter会那么慢。如上所述,我使用发布模式运行它,尽管要花5分钟在真实的iPhone中启动一个简单的todoList应用...