2013-07-25 2 views
-1

Я пытаюсь разрешить пользователям моего приложения изменять длину заставки. Я создал 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

+0

Можете ли вы разместить свой XML-макет Предпочтения? и стоп-трасса на logcat также полезна. –

ответ

2

Вы бы лучше посылать замедленный Message к Handler в потоке пользовательского интерфейса.