缓存共享首选项布尔值:性能是否证明增加复杂性是合理的



在我的一个onTouch()侦听器中,我目前在决定如何处理触摸事件之前检查布尔用户设置:

boolean shouldCue = preferences.getBoolean(v.getContext().getString(R.string.should_cue), true);

观察 LogCat,我可以看到当用户触摸屏幕时,这个语句被调用了无数次!

所以,我正在考虑通过实现onSharedPreferenceChanged()侦听器来"缓存"shouldCue布尔值。

我当然可以继续实现这一点,并且......在我的超高速Android设备上观察到可以忽略不计的差异。我不可能在"大多数Android设备"上测试这一点,因为有太多的变化。

所以我的问题是:

  1. 即使首选项没有通过UI更改,也会调用onSharedPreferenceChanged()吗?(即通过editor.commit();以编程方式)
  2. 如果 SharedPreferences 布尔值可以从 UI 或编程方式修改(但不能同时修改),缓存它是否强制@Synchronized处理?
  3. 关于缓存方法与非缓存方法之间的性能差异的任何估计?(为了简化问题,假设我们指的是像Droid 1 A855这样的旧手机)

在我看来,最好避免在 onTouch() 方法中读取首选项:它的触发速度非常快,并且从首选项读取意味着解析 xml(这不是您应该每秒多次执行的操作)。您可以在模拟器上尝试一下,看看它的反应是否足够快,但最好在其他地方阅读或找到另一种方法来存储/获取此布尔值。

编辑:关于问题:

1)是的,即使首选项根本没有改变

2)是的,它可以通过这种方式实现,但这可能会导致许多问题,特别是如果您打算重用视图

3)由于许多因素(硬件,操作系统版本,启用的jit等),我无法准确估计对其他设备的影响,但是如果没有基准测试,缓存方法似乎是最有效的。

你真的必须在 onTouch() 方法中操作那个布尔值吗?在这种情况下,为什么不定义钩子或侦听器?

最新更新