可以而且我们应该在NON UI线程上提交SharedPreferences,如果是的话怎么样?

时间:2016-10-02 14:47:43

标签: android multithreading sharedpreferences

我正在创建一个应用程序,它必须在运行时保存和提取数据,而sharedPrefrences正在使我的动画滞后。那么有没有办法在NON-UI线程上保存和检索数据。

或者我的方法有什么问题

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

还有一种这样的方法。

有没有办法将整个方法放在另一个线程上。

基本上我想解决滞后的问题。

1 个答案:

答案 0 :(得分:2)

  

有没有办法在NON-UI线程上保存和检索数据。

缓存

SharedPreferences。第一次尝试访问给定的SharedPreferences(例如getSharedPreferences())时,会有磁盘I / O.欢迎您在后台线程上完成这项工作,在您需要首选项之前的某个时间。

您可以致电apply()而不是commit(),以便在框架提供的后台线程中保留对SharedPreferences的更改。