Isolate 环境下 SharedPreferences 数据不能同步问题?

2020-07-15 10:28:36 +08:00
 YokitCoder
cronStock() async {
    _stockCode = _stockCodeController.value.text;
    _growRate = _growRateController.value.text;
    _reduceRate = _reduceRateController.value.text;

    ……

    saveData();
    refreshStock(true);

    await AndroidAlarmManager.periodic(const Duration(seconds: 30), periodicAlarmID, refreshStock, wakeup: true);
}

saveData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.reload();
    try {
        print('0001 saveData: '+DateTime.now().toString());
        prefs.setString('stock_prefix', stockPrefix);
        prefs.setString('stock_code', _stockCodeController.value.text);
        prefs.setDouble('grow_rate', double.parse(_growRateController.value.text));
        prefs.setDouble('reduce_rate', double.parse(_reduceRateController.value.text));
    } on FormatException catch(e) {

    } catch (e) {
        // No specified type, handles all
    }
}

……

refreshStock([bool isManual = false]) {
    print('0002 refreshStock afterTimer: '+DateTime.now().toString());

    Future<List> stockShared = getShared();
    stockShared.then((List shared) {

        print('isManual: $isManual');
        print('shareData: $shared');
        
    });
}

Future<List> getShared() async {
    print('getShared');
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.reload();
    return [
        prefs.getString('stock_prefix'),
        prefs.getString('stock_name'),
        prefs.getString('stock_code'),
        prefs.getDouble('grow_rate'),
        prefs.getDouble('reduce_rate'),

        // 当前值
        prefs.getString('stock_price'),
        prefs.getDouble('stock_rate'),
        prefs.getInt('rate_color'),
    ];
}

AndroidAlarmManager 插件用到了 Isolate 环境,在 Isolate 环境下 refreshStock 函数中的 getShared()拿到的 SharedPreferences 数和上面 saveData()存储的数据不同步,要多次间隔调用的后才会同步到。

2102 次点击
所在节点    Flutter
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/690144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX