Я пытаюсь разрешить пользователям моего приложения изменять длину заставки. Я создал EditTextPreference в my preferences.xml и дал ему значение по умолчанию 5. Ключ - это «продолжительность». Я решил, что могу использовать SharedPreferences и использовать метод getLong для получения значения поля, а затем использовать его как параметр для метода сна Thread.Получить Thread sleep duration from App Preferences
Вот мой код:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
long dur = prefs.getLong("duration", 5);
final long duration = dur*1000; //convert from seconds to milliseconds
Thread timer = new Thread() {
public void run() {
try{
sleep(duration);
}
catch (InterruptedException e) {
e.printStackTrace();
}
finally {
Intent openMenu = new Intent("com.heh.blah.MENU");
startActivity(openMenu);
}
}
};
timer.start();
Этот код работает прекрасно, пока предпочтение не изменилось. Однако, если я перейду к настройкам и измените предпочтение Duration (даже если я его не изменю и просто нажмите «ok» со значением по умолчанию 5 в поле ИЛИ нажмите «Отмена») и закройте приложение, в следующий раз открывается, экран переходит в белый цвет на несколько секунд, затем весь черный, а затем он падает, и я получаю «К сожалению, приложение остановилось». всплывающее окно. Очистка данных приложения позволяет приложению нормально запускаться снова (но с 5-секундным заставкой).
ОБНОВЛЕНИЕ: Просто открывайте настройки ДАЖЕ БЕЗ ИЗМЕНЕНИЯ КЛИКЛИЗАЦИИ ИЛИ ИЗМЕНЕНИЯ НИЧЕГО, заставляя его сбой во время следующего запуска.
Любая помощь в этом вопросе была бы высоко оценена !!!
Спасибо, Max
Можете ли вы разместить свой XML-макет Предпочтения? и стоп-трасса на logcat также полезна. –