代码之家  ›  专栏  ›  技术社区  ›  SamHoque

SharedPRef在重新启动应用程序时不保存更改

  •  1
  • SamHoque  · 技术社区  · 6 年前

    这是一个很好的开始。我有一种情况需要在清除共享首选项后重新启动应用程序,所以这就是我要做的

    sp.edit().clear().apply();
    Intent mStartActivity = new Intent(context, IntroActivity.class);
    int mPendingIntentId = 123456;
    PendingIntent mPendingIntent = PendingIntent.getActivity(context, mPendingIntentId,    mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
    AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 100, mPendingIntent);
    System.exit(0);
    

    sp.edit().clear().apply();
    

    然后继续手动重新启动应用程序,有人能告诉我如何修复这个问题,这样我就可以自动重新启动应用程序而无需用户手动操作了吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   TheWanderer    6 年前

    commit() apply()

    与commit()不同的是,apply()会将其首选项同步写入持久存储,它会立即将其更改提交到内存中的sharedreferences,但会启动异步提交到磁盘,并且不会通知您任何失败。如果此sharedreferences上的另一个编辑器在apply()尚未完成时执行常规commit(),则commit()将阻塞,直到完成所有异步提交以及commit本身。

    Source

    是异步的,可能不会立即启动。如果调用它,然后立即终止进程,则没有时间实际保存对磁盘所做的更改。

    System.exit(0)