SharedPref не сохраняет изменения при перезапуске приложения - PullRequest
0 голосов
/ 30 декабря 2018

Это довольно хорошее начало.У меня есть ситуация, когда мне нужно перезапустить приложение после очистки общих настроек, вот что я делаю

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 голосов
/ 30 декабря 2018

Используйте commit() вместо apply().

В отличие от commit (), который синхронно записывает свои предпочтения в постоянное хранилище, apply () сразу же фиксирует свои изменения в SharedPreferences в памятино запускает асинхронную фиксацию на диск, и вы не будете уведомлены о каких-либо сбоях.Если другой редактор в этой SharedPreferences выполняет обычную фиксацию (), а метод apply () все еще не выполнен, то фиксация () будет блокироваться до тех пор, пока не будут завершены все асинхронные фиксации, а также сама фиксация.

Источник

Как и в документации, apply() является асинхронным и может не запуститься немедленно.Если вы вызываете его, а затем сразу же завершаете свой процесс, у него нет времени на фактическое сохранение внесенных вами изменений на диск.

commit(), с другой стороны, блокирует текущий поток до завершения операции., убедившись, что System.exit(0) не прерывает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...