【发布时间】:2021-01-14 14:19:21
【问题描述】:
我有一个流应该在屏幕上无休止地运行(它每 5 秒产生一个值)。它必须在应用程序进入后台时暂停,并在应用程序返回前台时恢复。问题是它在暂停后实际上并没有恢复。我的代码的相关部分如下:
class MyWidgetState extends State<MyWidget> with WidgetsBindingObserver{
StreamSubscription _subscription;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
WidgetsBinding.instance.addPostFrameCallback((_) async {
await _initStreamAndSubscribe(); // inits a stream s and sets
// _subscription = s.listen(...)
});
}
@override
void didChangeAppLifecycleState(AppLifecycleState lifecycleState) {
super.didChangeAppLifecycleState(lifecycleState);
if (lifecycleState != AppLifecycleState.resumed) {
_subscription?.pause();
} else {
_subscription?.resume();
}
}
@override
void dispose() {
super.dispose();
_subscription?.dispose();
WidgetsBinding.instance.removeObserver(this);
}
}
这里有什么问题吗?或者问题可能出在我的代码的其他部分?
编辑 1
我想补充一点,我在同一个班级的其他地方打电话给_subscription?.pause()和_subscription?.resume(),即当我需要去另一个屏幕然后回来时。在这种情况下,流恢复没有问题。
【问题讨论】: