当应用程序暂停时,我设置每一分钟运行一次的警报,当应用程序恢复时,我取消计时器。但当我在恢复应用程序时得到数据时,我不会得到最新的数据。当应用程序暂停时,我得到了以前值的数据。但如果应用程序被分离,那么我会得到最新的值。我该如何解决这个问题。非常感谢。
@override
void didChangeAppLifecycleState(AppLifecycleState state) async {
print('app $state');
switch (state) {
case AppLifecycleState.paused:
update(1, updateTime);
break;
case AppLifecycleState.resumed:
final sec = await Utils.getInt('saveTimeEveryMin');
print('app Resumed: $sec');
cancel(1); // alarm cancel
break;
default:
}
super.didChangeAppLifecycleState(state);
}
update(int id, Function callback) async {
print('alram: started ${DateTime.now()}');
final value = await AndroidAlarmManager.periodic(
Duration(minutes: 1),
id,
callback,
allowWhileIdle: true,
exact: true,
wakeup: true,
);
print('is alarm on? $value');
}
void updateTime() async {
print('update ${DateTime.now()}');
int? time = await Utils.getInt('saveTimeEveryMin');
(time == null) ? time = 60 : time -= 60;
await Utils.saveInt('saveTimeEveryMin', time);
print('updated $time ${DateTime.now()}');
}
我今天遇到了同样的问题,我从flutter workmanager那里找到了一些解决方案(同样的问题也发生在那里(。您可以点击此处查看该问题。
简而言之,您可以使用SharedPreferences包中提供的reload()
函数,该函数获取更新的值
或
在AlarmManager 的回调函数中获取SharedPreferences
实例之前,添加一秒钟的延迟
在我的情况下,我必须同时做这两件事来解决这个问题,