在while循环中读取SharedPreferences的不良做法?

Cet*_*thy 1 performance android while-loop sharedpreferences

在while循环中读取SharedPreferences是不好的做法?数据是始终从内部/外部存储读取,还是缓存在内存中?

我这样做是因为我的应用程序中的一个线程需要知道自上次迭代以来是否进行了更改.

ele*_*ven 5

它可能有效,但使用while循环等待事件绝对是不好的做法.要捕获一些事件,请尝试使用Observer模式.这种模式的想法是将对象分成观察者(等待事件)和可观察(注册/捕获事件并通知观察者)

这种方法有Java内置的类和接口.例:

可观察到:

import java.util.Observable;

public class SharedPrefsWrapper extends Observable{

    public static final int EVENT_PUT_STRING = 0;

    public void putString(String key, String value){
        //put string into shared preferences
        //then notify Observers
        notifyObservers(EVENT_PUT_STRING);
    }
}
Run Code Online (Sandbox Code Playgroud)

观察员:

import java.util.Observable;
import java.util.Observer;

public class SomeActivity extends Activity implements Observer {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.some_activity);

        SharedPrefsWrapper prefs;
        //...
        prefs.addObserver(this);
    }

    @Override
    public void update(Observable observable, Object event) {
        if(event.equals(SharedPrefsWrapper.EVENT_PUT_STRING)){
            //event of writing string is caught
        }
    }
}
Run Code Online (Sandbox Code Playgroud)