Boo*_*unz 5 concurrency lifecycle persistence dart flutter
假设我们有一个 Flutter 应用程序,我们希望使用共享首选项来保存一些持久数据。
(我们不想每次用户更改数据时都持久保存数据,因为 UI 直接依赖于数据,为了保存数据,我们需要使用等待异步,这会滞后于 UI),因此我们使用 WidgetsBindingObserver检测应用程序何时进入后台,以便使用该事件作为保存数据的有效捕获所有机会。
因此,我们应用程序的根页面中有一些类似这样的代码:
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.paused) {
// went to Background
myPersistentData.instance.write(); // <-------------- this is an async operation
}
if (state == AppLifecycleState.resumed) {
// came back to Foreground
}
}
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但我担心生命周期可能会很快超出“暂停”(暂停>停止>完成),以至于这个“尾随”操作没有时间完成......因此数据不会得救了。
这是合理的担忧吗?
小智 1
我想说的是,尽可能避免在dispose小部件的 或 生命周期方法中调用异步操作,虽然您可能担心它可能/可能不会完成,但我会建议像 dart 文档所述:https://api.dart .dev/stable/2.14.1/dart-async/unwaited.html,“并非所有的 future 都需要等待。”,“你应该使用unawaited来传达故意不等待 future 的意图。”。但一般来说,我会避免在这些方法中调用异步函数。
| 归档时间: |
|
| 查看次数: |
757 次 |
| 最近记录: |