这是一个很好的开始。我有一种情况,我需要在清除共享的首选项后重新启动应用程序,这就是我要做的
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();
然后继续手动重新启动应用程序,有人可以向我解释如何解决此问题,这样我可以自动重新启动应用程序而无需用户手动进行操作?
答案 0 :(得分:2)
使用commit()
代替apply()
。
与commit()会将其首选项同步写到持久性存储中的方式不同,apply()立即将其更改提交到内存中的SharedPreferences,但会启动对磁盘的异步提交,并且不会收到任何故障通知。如果此SharedPreferences上的另一个编辑器在apply()仍未完成的情况下执行常规commit(),则commit()将阻塞,直到所有异步提交以及提交本身都完成为止。
类似于文档说明,apply()
是异步的,可能不会立即启动。如果您调用它,然后立即终止进程,则没有时间实际保存对磁盘所做的更改。
commit()
将阻塞当前线程,直到操作完成为止,确保System.exit(0)
不中断它。