阅读/写作偏好是一项昂贵的操作吗?

Jan*_*cci 6 io android preferences changelistener

我有一个首选项,控制我的应用程序是否在用户单击按钮时播放声音(经常这样做,想到计算器).每次用户单击按钮时,都会调用以下方法:

private void playButtonClickSound() {
    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(parentActivity);
    boolean sounds = sharedPrefs.getBoolean("prefSounds", false);
    if (sounds) {
        // blah
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为阅读偏好可能是一项昂贵的操作(类似于I/O操作,因为首选项是持久的),并且由于用户经常点击按钮,因此以这种方式执行操作可能是个坏主意.

一般来说,经常读/写偏好是个坏主意吗?如果是这样,可能还有其他方式,例如注册首选项更改侦听器以在首选项更改时收到通知?

kco*_*ock 5

坦率地说,我在UI线程中做了我的全部,无论我是否应该,并且我从未注意到即使在较慢的设备上也有轻微的犹豫.它非常快.这就是说,它 I/O,这样做异步肯定不会是一个事情.对于写入,如果您的目标是API 9及更高版本,则可以使用apply()而不是commit()异步为您进行写入.

至于你关于偏好改变听众的问题,是的,你也可以这样做:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.registerOnSharedPreferenceChangeListener(new OnSharedPreferenceChangeListener() {
    @Override
    public void onSharedPreferenceChanged(SharedPreferences preferences, String key) {
        if("my_preference_key".equals(key) {
            //Handle it here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)