2016-10-02 72 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()'相同,后者返回布尔结果。 –

相关问题