当前位置: 首页 > 知识库问答 >
问题:

缓存SharedReferences布尔值:性能是否能证明复杂性的增加?

仲孙兴平
2023-03-14

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

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

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

所以,我在考虑通过实现onSharedPre0003 ceChanged()监听器来缓存应Cue布尔值。

我当然可以继续实施,然后。。。在我的超高速Android设备上,可以观察到微不足道的差异。我不可能在“大多数Android设备”上测试这个,因为有太多的变体。

所以我的问题是:

  1. 即使没有通过UI更改首选项,是否也会调用onSharedPreferenceChanged()?(即通过editor.commit()以编程方式)

共有1个答案

郎曜文
2023-03-14

在我看来,最好避免在onTouch()方法中读取首选项:它启动得非常快,从首选项中读取意味着解析xml(这并不是你每秒应该做这么多次的事情)。您可以在emulator上尝试,看看它的反应是否足够快,但最好在其他地方读取,或者找到另一种方法来存储/获取此布尔值。

编辑:关于问题:

1)是的,即使偏好没有改变

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

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

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

 类似资料:
  • 问题内容: 我想知道使用 构造函数构造BigInteger* 对象的性能/ 复杂性 。 * 请考虑以下方法: 此方法在开头创建带有数字的String对象,并且每次迭代都会增加它的数量。它测量并输出构造相应对象所需的时间。 在我的机器(Intel Core i5 660,JDK 6 Update 25 32位)上,输出为: 尽管忽略了高达10 ^ 5的行(由于(处理器)缓存效果,JIT编译等可能引入

  • 我必须使用StackExhange.redis C#在redis缓存中频繁添加N个(独立的)项,每个项都有不同的过期时间,以便在客户端有最小的时间,在服务器端有最小的阻塞和成本。Redis服务器每秒将收到数百个get请求,所以我不想打乱get时间。 我已经阅读了这里的文档并在这里回答。我找不到一个执行此操作的方法。考虑到不同的选择: null

  • ES 内针对不同阶段,设计有不同的缓存。以此提升数据检索时的响应性能。主要包括节点层面的 filter cache 和分片层面的 request cache。下面分别讲述。 filter cache ES 的 query DSL 在 2.0 版本之前分为 query 和 filter 两种,很多检索语法,是同时存在 query 和 filter 里的。比如最常用的 term、prefix、rang

  • 问题内容: 我将要编写一个包含的查询。顾名思义,是一个布尔字段(实际上是a ,根据需要设置为0或1)。 索引该字段是否有任何性能提升?引擎(在这种情况下为InnoDB)在查找索引时会表现得更好还是更差? 问题答案: 并不是的。您应该像书一样思考它。如果一本书中只有3种单词并且您都对它们进行了索引,那么您将拥有与普通页面相同数量的索引页面。 如果一个值的记录相对较少,则性能会有所提高。例如,如果您有

  • 我有一个相当大的java ee应用程序,它有一个巨大的类路径来执行大量的xml处理。目前,我正试图通过取样探查器来加速我的一些功能和定位缓慢的代码路径。 我注意到的一件事是,特别是我们的代码中有等调用的部分非常慢。我一直跟踪到方法,总是创建一个新的实例。在javadoc中,我找到了关于缓存的以下说明: 提供程序是懒惰地定位和实例化的,即按需提供。服务加载器维护到目前为止已加载的提供程序的缓存。迭代

  • 如果我试图缓存一个巨大的(例如:100GB表),当我对缓存的执行查询时,它会执行全表扫描吗?火花将如何索引数据。火花留档说: Spark SQL可以通过调用Spark,使用内存中的列格式缓存表。目录cacheTable(“tableName”)或dataFrame。缓存()。然后Spark SQL将只扫描所需的列,并将自动调整压缩以最小化内存使用和GC压力。你可以打电话给spark。目录uncac