2016-10-02 74 views
0

我正在製作一個應用程序,它必須在運行時保存並提取數據,並且sharedPrefrences正在使我的動畫滯後。那麼有沒有一種方法可以在非UI線程上保存和檢索數據。可以並且應該在非UI線程上提交SharedPreferences,如果是的話,該怎麼做?

還是有我的方法

private void difficultyHandler(){ 
    sharedPref = this.getSharedPreferences(getString(R.string.lScore),Context.MODE_PRIVATE); 
    difficulty = sharedPref.getInt(getString(R.string.difficultyController),0); 
    if (times >= 1){ 

     long latestScore1 = sharedPref.getLong(getString(R.string.lScore1),0); 
     long latestScore2 = sharedPref.getLong(getString(R.string.lScore2),0); 
     editor = sharedPref.edit(); 
     editor.putLong(getString(R.string.lScore1),score); 
     editor.putLong(getString(R.string.lScore2),latestScore1); 


     if(latestScore1 >= 60 && latestScore2 >=60 && latestScore1 < 140 && latestScore2 <140){ 
      difficulty = 2; 
     }else if (latestScore1 < 60 && latestScore2 < 60){ 
      difficulty = 1; 
     }else if(latestScore1 >= 140 && latestScore2 >=140){ 
      difficulty = 3; 
     } 
     editor.putInt(getString(R.string.difficultyController),difficulty); 
     editor.commit(); 
    } 

還有一個方法,像這樣的任何問題。

有沒有辦法把整個方法放在另一個線程上。

基本上我想解決滯後的問題。

+0

*** SharedPreferences使事情變慢***真的嗎? ,首先我想知道什麼類型的數據以及您在SharedPreferences中保存的數據量,看看您的方法,但不是那麼可觀。 – nobalG

+0

@nobleG我有32個閱讀和寫作活動,並在API 14級別的Xperia E設備上運行。 –

回答

2

所以有沒有辦法在非UI線程上保存和檢索數據。

SharedPreferences被高速緩存。第一次嘗試訪問給定的SharedPreferences(例如,getSharedPreferences())時,將會有磁盤I/O。歡迎您在後臺線程中完成此項工作,並在您需要偏好時提前完成。

您可以調用apply()而不是commit()在框架提供的後臺線程上保留對SharedPreferences的更改。

+0

爲了進一步闡明jay的區別,'apply()'與'commit()'相同,後者返回布爾結果。 –

相關問題