值得一提的另一个类是android.util.LruCache<K, V>,这个类是Android 3.1(代号 Honeycomb MR1)引入的,可以在创建时定义缓存的最大长度。另外,还可以通过覆写sizeof()方法改变每个缓存条目计算大小的方式。因为android.util.LruCache只能在Android 3.1及更高版本上使用,如果针对版本低于3.1的Android设备,则仍然必须使用不同的类来实现自己的应用缓存。由于目前的Android 3.1设备占有率不高,这种情况很有可能出现。替代方案是继承java.util.LinkedHashMap覆写removeEldestEntry。LRU(Least Recently Used)缓存先丢弃最近最少使用的项目。在某些应用中,可能需要完全相反的策略,即丢弃缓存中最近最多使用的项目。Android现在没有这种MruCache类,考虑到MRU缓存不常用,这并不奇怪。

当然,缓存是用来存储信息而不是计算结果的。通常,缓存被用来存储下载数据(如图片),但仍需严格控制使用量。例如,覆写LruCache的的sizeof方法不能简单地以限制缓存中的条目数为准则。尽管这里简要地讨论了LRU和MRU策略,你仍可以在缓存中使用不同的替代策略,最大限度地提高缓存命中率。例如,缓存可以先丢弃那些重建开销很小的项目,或者干脆随机丢弃项目。请以务实的态度设计缓存。简单的替换策略(如LRU)可以产生很好的效果,把手上资源留给更重要的问题。

我们用了几个不同的技术优化斐波那契数列的计算。虽然每种技术都有其优点,却没有一个实现是最佳选择。往往最好的结果是结合多种不同的技术,而不是只依赖于其中之一。例如,更快的实现可以使用预计算、缓存机制,甚至采用不同的公式。(提示:当n是4的倍数,会发生什么?)怎样在100毫秒内计算出FInteger.MAX_VALUE?

更多相关文章

  1. 箭头函数的基础使用
  2. NPM 和webpack 的基础使用
  3. Python list sort方法的具体使用
  4. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
  5. Android中使用ormlite实现持久化--HelloOrmLite
  6. 【转】IDEA / Android(安卓)studio 使用gradle 编译 Failed to r
  7. Android(安卓)之Service的使用及生命周期
  8. Android(安卓)下使用 JSON 实现 HTTP 请求,外加几个示例!
  9. Android:Field can be converted to a local varible.的解决办法

随机推荐

  1. Android音频数据传输
  2. Value xxx of type org.json.JSONObject
  3. Android应用程序的国际化与本地化
  4. Android(安卓)下载网络图片注意的问题
  5. appium 自动化测试之知乎Android客户端
  6. 不继承TabActivity定义TabHost
  7. Android(安卓)全局异常捕获DefaultUncaug
  8. android 面试经典(4)
  9. Android之AVD安装APK
  10. Flutter 基础组件之 Stack