flutter - Flutter 应用程序继续在后台运行并导致不必要的电池消耗
问题描述
我正在开发一个 Flutter 应用程序,用于控制连接到本地网络的 IoT 设备。
不幸的是,在测试该应用程序时,我遇到了以下问题:根据 iOS 设置应用程序,该应用程序占当前电池消耗的很大比例,即使在屏幕时间很短的情况下也是如此。换句话说,该应用程序在后台运行时正在耗尽手机的电池电量。
我对这个问题做了一些研究,得出的结论是,当用户返回主屏幕或切换到不同的应用程序时,Flutter 应用程序应该被暂停。事实上,有无数文章描述了即使在应用程序被挂起后仍能执行代码的方法。
这对我来说似乎不是这样。出于测试目的,我创建了一个周期性计时器,它会在每秒钟通过时打印一条消息。我还通过WidgetsBindingObserver
. 这是我得到的输出:
如您所见,即使在应用程序暂停后(通过我按下主页按钮),计时器仍然处于活动状态。
当用户将应用程序发送到后台时,有没有办法正确暂停应用程序?
技术信息:
颤振医生输出:
[✓] 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();
}
当您的应用程序在后台时,这将取消计时器
推荐阅读
- github - 当 Circle CI 跳过测试时,Github 如何与 Circl-CI 配合使用?
- elasticsearch - 获取从 multiJson 对象创建的 PostData 字符串(json)表示
- c# - 如何从 WPF 中的 C# 代码访问应用程序图标(从 VS 设置)
- xamarin - HttpClient 在 Xamarin Android 上的响应时间非常长
- python - 字符串中不需要的字节
- opayo - VspPHPKit 表单集成 - 5080:错误:表单事务注册失败
- python - 为什么for循环不附加列表
- mysql - 为什么 mysql 中的 set-option 查询计数如此之高?
- ios - UICollectionView didSelectItemAt 从不触发
- swift - windowWillClose 和按钮操作未调用 Swift