Я хочу добавить много значений в SharedPreferences, но это блокирует мой поток пользовательского интерфейса. Я попытался сделать это в doInBackground() ASyncTask, а также с помощью Handler, но обе попытки оказались бесполезными.Как редактировать SharedPreferences без блокировки темы пользовательского интерфейса?
Вот метод:
....
Context c = RamadanWidgetConfig.this;
savedDataSehri = c.getSharedPreferences("Sehri", 0);
savedDataIftar = c.getSharedPreferences("Iftar", 0);
boolean sFilled = savedDataSehri.getBoolean("filled", false);
boolean iFilled = savedDataIftar.getBoolean("filled", false);
if (!sFilled || !iFilled) {
fillSharedPreferences();
} ....
private void fillSharedPreferences() {
String date[] = {"6/18/2015", "6/19/2015", "6/20/2015", "6/21/2015", "6/22/2015", "6/23/2015", "6/24/2015", "6/25/2015", "6/26/2015", "6/27/2015", "6/28/2015", "6/29/2015", "6/30/2015", "7/1/2015", "7/2/2015", "7/3/2015", "7/4/2015", "7/5/2015", "7/6/2015", "7/7/2015", "7/8/2015", "7/9/2015", "7/10/2015", "7/11/2015", "7/12/2015", "7/13/2015", "7/14/2015", "7/15/2015", "7/16/2015", "7/17/2015"};
String sehri[] = {"4:13 AM", "4:13 AM", "4:14 AM", "4:14 AM", "4:14 AM", "4:14 AM", "4:15 AM", "4:15 AM", "4:15 AM", "4:15 AM", "4:16 AM", "4:16 AM", "4:17 AM", "4:17 AM", "4:17 AM", "4:18 AM", "4:18 AM", "4:19 AM", "4:19 AM", "4:20 AM", "4:20 AM", "4:21 AM", "4:21 AM", "4:22 AM", "4:22 AM", "4:23 AM", "4:24 AM", "4:24 AM", "4:25 AM", "4:26 AM"};
String iftar[] = {"7:24 PM", "7:25 PM", "7:25 PM", "7:25 PM", "7:25 PM", "7:25 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:26 PM", "7:25 PM", "7:25 PM", "7:25 PM", "7:25 PM", "7:24 PM"};
SharedPreferences.Editor editorSehri = savedDataSehri.edit();
SharedPreferences.Editor editorIftar = savedDataIftar.edit();
for (int i = 0; i < date.length; i++) {
editorSehri.putString(date[i], sehri[i]);
editorIftar.putString(date[i], iftar[i]);
}
editorSehri.putBoolean("filled", true);
editorIftar.putBoolean("filled", true);
editorSehri.apply();
editorIftar.apply();
}
В принципе, я добавить виджет на главном экране и перед добавлением его я проверяю, если у меня есть данные или нет. Этот метод вызывается, если у меня нет данных. Если это не вызвано, тогда другой код выполняется в миллисекундах.
EDIT: На самом деле я узнал, что проблема лежит где-то в другом месте. Я очистил данные приложения перед добавлением виджета, чтобы очистить SharedPreferences, но позже выяснил, что очищающие данные также очищают что-то еще, что связано с первым запуском приложения. Приложение всегда занимает много времени при запуске в первый раз. Возможно, это настраивает, но я точно не знаю, что происходит. Поэтому после очистки данных, а затем добавления виджета, приложение в основном запускается в первый раз. Вот почему он замедлялся, и я думал, что SharedPreferences замедляет работу.
Теперь мне нужно выяснить, почему приложение занимает так много времени на первом запуске и как его избежать. (Всплывающий экран приходит мне на ум).
Я добавил еще несколько строк кода, чтобы показать, когда и как этот метод вызывается. Я просто проверяю значение из SharedPreferences под названием «заполнено». Если это правда, у меня есть данные. Во всех остальных случаях я предполагаю, что данных нет. – Usman
Как вы пробовали резьбу? Весь ваш код живет в виджетах? –
На самом деле я узнал, что проблема лежит где-то в другом месте. Я очистил данные приложения перед добавлением виджета, чтобы очистить SharedPreferences, но позже выяснил, что очищающие данные также очищают что-то еще, что связано с первым запуском приложения. Приложение всегда занимает много времени при запуске в первый раз. Возможно, это настраивает, но я точно не знаю, что происходит. Поэтому после очистки данных, а затем добавления виджета, приложение в основном запускается в первый раз. Вот почему он замедлялся, и я думал, что SharedPreferences замедляет работу. – Usman