2013-07-25 24 views
-1

我試圖讓我的應用程序的用戶更改啓動屏幕的長度。我在我的preferences.xml中創建了一個EditTextPreference,並給它一個默認值5.關鍵是「duration」。我想我可以使用SharedPreferences並使用getLong方法來獲取字段的值,然後將其用作Thread的sleep方法的參數。從應用程序首選項獲取線程睡眠持續時間

這裏是我的代碼:

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(); 

此代碼工作完全正常,只要偏好不會改變。但是,如果我進入偏好設置並更改「持續時間」偏好設置(即使我不更改它,只需在框中按默認值5打「OK」或點擊取消)並關閉應用程序,下次打開,屏幕全白色幾秒鐘,然後全黑,然後它崩潰,我得到「不幸的是,應用程序已停止。」彈出框。清除應用程序數據可以讓應用程序再次正常啓動(但啓動時間爲5秒)。

更新:只要打開首選項即使沒有改變點擊或改變任何東西導致它在下次啓動時崩潰。

任何有關這個問題的幫助將非常感謝!

感謝, 最大

+0

你能發佈你的首選項XML佈局嗎? logcat上的堆棧跟蹤也很有用。 –

回答

2

你會好起來的UI線程發送延遲MessageHandler