缓存的四种方式

CacheConcurrencyStrategy.NONE

CacheConcurrencyStrategy.READ_ONLY ,只读模式,如果对数据进行更新操作,会有异常;

CacheConcurrencyStrategy.READ_WRITE ,读写模式在更新缓存的时候会把缓存里面的数据换成一个锁,其它事务如果去取相应的缓存数据,发现被锁了,直接就去数据库查询;

CacheConcurrencyStrategy.NONSTRICT_READ_WRITE ,不严格的读写模式则不会的缓存数据加锁;

CacheConcurrencyStrategy.TRANSACTIONAL ,事务模式指缓存支持事务,当事务回滚时,缓存也能回滚,只支持 JTA 环境。
### Android RecyclerView 四级缓存实现原理 RecyclerView 的高效性能主要依赖于其强大的视图复用机制,其中四级缓存起到了至关重要的作用。以下是各级缓存的具体功能及其工作方式: #### 1. Scrap 缓存 (mChangedScrap 和 mAttachedScrap) Scrap 缓存分为两种:`mChangedScrap` 和 `mAttachedScrap`。这两种缓存主要用于存储那些仍然附加在父布局上的 ViewHolder 或者已经从屏幕上移除但仍可能被快速重用的 ViewHolder。 - **mAttachedScrap**: 存储的是当前仍绑定到 RecyclerView 上的 View,这些 View 可能因为位置变化而需要重新绘制[^1]。 - **mChangedScrap**: 当某个 Item 发生更新操作时(例如调用了 notifyItemChanged()),对应的 ViewHolder 将会被放入此缓存中[^4]。 这种设计使得当某些项目只是发生了轻微的变化时无需完全销毁并重建它们,从而提高了效率。 #### 2. RecycledViewPool RecycledViewPool 是一种跨多个 RecyclerView 实例共享的全局缓存池。如果应用中有多个 RecyclerView 使用相同的 Adapter,则可以通过设置同一个 RecycledViewPool 来减少重复创建 Views 所带来的开销[^2]。 ```java recyclerView.setRecycledViewPool(new RecyclerView.RecycledViewPool()); ``` 通过这种方式可以有效降低内存消耗,并提升滚动流畅度。 #### 3. Cache Extension 自定义缓存扩展 开发者还可以利用 `ViewCacheExtension` 提供自己的缓存逻辑来满足特定需求。比如对于一些复杂场景下的特殊处理规则就可以在此处实现[^5]。 默认情况下,默认屏幕外缓存大小为两个元素(`DEFAULT_CACHE_SIZE=2`) ,这意味着即使某项离开了可见区域也可能会暂时保留一段时间以便稍后再次显示时不需重新构建整个 UI 结构。 #### 4. LayoutManager 内部缓存 除了上述三种显式的缓存之外,在实际运行过程中还会涉及到由LayoutManager管理的一些临时对象保存策略,虽然严格意义上不属于传统意义上的“四级”,但它同样影响着整体表现效果[^3]。 --- ### 如何优化 RecyclerView 性能? 为了进一步提高用户体验质量,可以从以下几个方面着手改进: - **合理配置缓存容量** 根据具体业务调整最大回收数量限制参数值,避免不必要的资源浪费;同时也要注意不要让过多闲置实例占用宝贵空间而导致其他部分出现问题。 - **启用预加载技术** 如果预计会有频繁访问临近列表末端的情况发生的话,那么提前准备好即将呈现出来的条目内容无疑是个不错的选择——这不仅能够缩短等待时间还能增强视觉连贯性感知程度。 - **简化适配器方法内部逻辑** 确保 onCreateViewHolder(), onBindViewHolder() 函数执行尽可能少的工作量,只做必要的初始化和数据填充动作即可。 最后提醒一点就是时刻关注最新版本官方文档说明以及社区讨论动态,及时采纳最佳实践建议不断迭代完善现有解决方案! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值