重新启动应用程序时,SharedPref不保存更改

时间:2018-12-29 23:52:07

标签: java android sharedpreferences

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

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

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

然后继续手动重新启动应用程序,有人可以向我解释如何解决此问题,这样我可以自动重新启动应用程序而无需用户手动进行操作?

1 个答案:

答案 0 :(得分:2)

使用commit()代替apply()

  

与commit()会将其首选项同步写到持久性存储中的方式不同,apply()立即将其更改提交到内存中的SharedPreferences,但会启动对磁盘的异步提交,并且不会收到任何故障通知。如果此SharedPreferences上的另一个编辑器在apply()仍未完成的情况下执行常规commit(),则commit()将阻塞,直到所有异步提交以及提交本身都完成为止。

Source

类似于文档说明,apply()是异步的,可能不会立即启动。如果您调用它,然后立即终止进程,则没有时间实际保存对磁盘所做的更改。

另一方面,

commit()将阻塞当前线程,直到操作完成为止,确保System.exit(0)不中断它。

相关问题