Flutter 应用程序继续在后台运行并导致不必要的电池消耗

问题描述

我正在开发一个 Flutter 应用,用于控制连接到本地网络的 IoT 设备。

不幸的是,在测试该应用程序时,我遇到了以下问题:根据 iOS 设置应用程序,即使在屏幕时间较低的情况下,该应用程序也是当前电池消耗的很大一部分。换句话说,该应用在后台运行时会耗尽手机的电池电量。

我对此问题进行了一些研究,得出的结论是,当用户返回主屏幕或切换到其他应用程序时,Flutter 应用程序将被暂停。 事实上,有无数文章描述了即使在应用程序暂停后仍然执行代码方法

我的情况似乎并非如此。出于测试目的,我创建了一个定期计时器,它会在任何一秒过去时打印一条消息。我还通过 WidgetsBindingObserver 监听应用生命周期状态的变化。 这是我得到的输出

terminal screenshot

如您所见,即使应用暂停(通过我按下主页按钮),计时器仍然处于活动状态。

用户将其发送到后台时,有没有办法正确暂停应用程序?

技术信息:

Flutter Doctor 输出

[✓] Flutter (Channel stable,2.2.0,on macOS 11.3.1 20E241 darwin-arm,locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.3)
[✓] Xcode - develop for iOS and macOS
[✗] Chrome - develop for the web (Cannot find Chrome executable at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome)
    ! Cannot find Chrome. Try setting CHROME_EXECUTABLE to a Chrome executable.
[✓] Android Studio (version 4.1)
[✓] VS Code (version 1.56.2)
[✓] Connected device (2 available)

! Doctor found issues in 1 category.

控制台输出是在运行 iOS 14.4 的 iPhone 8 上生成的,但我在 Android 上也观察到了这个问题。

提前致谢,ThePC007。

解决方法

在您的 Widget 上重写 dispose 方法,如下所示。

@override
  void dispose() {
    timer.cancel();
    super.dispose();
  }

当您的应用程序在后台时,这将取消计时器