一尘不染

如何在Flutter App中处理onPause / onResume?

flutter

我是Dart / Flutter的新手,并且想构建一个简单的应用,其中LinearProgressBar每秒更新一次。

无需过多了解实际代码,我可以进行以下设置。

  • 根据经过的时间计算进度的函数。
  • 一个显示进度的LinearProgressBar。
  • 定期的Timer重新计算进度并每秒更新进度栏。
  • 每次我都调试打印“ tick”,重新计算完成。

一切都按预期进行,只有一个例外。当我在Android设备上的后台移动应用程序时,“滴答声”会一直打印。

在本机Android上,当触发“ onPause”事件时,我将取消定期计时器。

Flutter中有类似的东西吗?我所能找到的只是“ initState”和“ dispose”。但是,将应用程序移至后台时,不会调用Dispose。

我不希望计时器一直在后台计时。

在我的研究中,我发现了关于Flutter的继续和暂停小部件的问题。它的答案建议使用TickerProviderStateMixin

我以下列方式使用它。

class _BarItemState extends State<BarItem> with SingleTickerProviderStateMixin {
    Ticker ticker;
    num progress = 1.0;

    @override
    void initState() {
       super.initState();
       ticker = createTicker((duration) => setState(() {
          debugPrint('tick');
          progress = duration.inSeconds / 30;
       }))
      ..start();
    }

    // other stuff omitted

}

它正在工作,但我仍然不满意。

原因是,股票报价回调现在每隔几毫秒被调用一次,而不是每秒一次。在我看来,这似乎是对资源的浪费(我不需要平滑的动画),…我是否使事情变得过于复杂?

即使我的用例似乎不需要它,我仍然想知道:

如何自行处理onPause / onResume事件?


阅读 1049

收藏
2020-08-13

共1个答案

一尘不染

您可以覆盖didChangeAppLifecycleState的的WidgetBindingObserver接口来接收通知的 应用程序生命周期
的变化。

此页面中有示例代码

2020-08-13