Android 数据的传递和缓存笔记

  • 分析各种数据的传递和缓存的情况
  • 对应不同情况的选择
  • 更多

以下都是自己的一些简单见解,有问题还请指出

分析

由于使用的场合和用途不同,我把数据的传递和缓存分成几种不同的情况

  • 临时数据,需要安全高效的传递,不需要缓存
  • 缓存数据,需要可持久化,不允许被自动的回收
  • 缓存数据,用于提高性能,允许在内存低时回收

临时数据

  • 简单的情况
    比如说用户输入的一些信息,我们只需要将这些信息传递到另一个界面或者处理后显示结果,这时候就不需要对数据进行缓存。
    对于这种情况,一般只要用 Intent / Bundle,就可以实现数据的传递。

  • 不同组件间的通信
    其实上面那种情况也包括了组件的通信,之所以分出来是因为涉及不同组件,比如 Activity、Fragment、Service 之间的通信是有很多可以讲的。
    可以参考 OCNYang 写的这篇好文:
    一文详尽 Android 通信:四大组件之间 & 进程间 & 线程间 & 多个App间

缓存数据,保证不丢失

比如说用户的登录信息、全局设置的状态等需要保证即使 app 被回收、重启也不能丢失的数据。
这时候一般使用 SQLitDatabase / SharedPreferences 来完成缓存。
前者是 Android 自带的小型数据库,在追求安全的时候可以使用,详情可以参考我的写的另一篇:
Database 笔记
后者将数据存储在本地的一个 xml 文件,使用比较方便也更快,同样,具体用法见于我写的另一篇:
SharedPreferences 笔记

缓存数据,提高性能

常见于一个页面加载很多从网络下载下来的图片,或者新闻列表。
为了提高性能,通常会把数据临时缓存到本地,但如果还是用数据库或者
SharedPreferences 来缓存会显得太过笨重,在清理缓存和控制内存大小方面很不方便。
这时候可以用 LruCache 来缓存数据,针对图片还有三级缓存的说法
详见于我写的另一篇 LruCache + File 图片缓存笔记

Application + ArrayMap

Application 是生命周期和 App 相同的一个类,可以用于存储传递数据,
ArrayMap 对应 JAVA 的 HashMap,用于存储数据。

上面提到的 Intent、Database、SharedPreferences 等方法的一个局限性就是只能传递或保存基本的数据类型。面对复杂的对象只能将对象序列化才行。

但假如我们在 Application 中创建一个 ArrayMap,并使用单例模式使得这个数组的实例保持唯一,这样就可以很简单快捷的实现在全局范围内传递或者保存任意类型的数据 。

这个实现可以见于我写的 Application 笔记
要注意的是这个方法如果不能正确的使用,是得不偿失的,具体..点上面的链接。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,674评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,014评论 19 139
  • 整理一些常见的Android面试题(针对于2~3年开发经验中所遇到的问题) synchronized锁静态方法和非...
    appzy阅读 2,373评论 4 18
  • Java中的String类可以被继承么? 答:不能,因为它是一个final类,同样的还有Integer,Float...
    gyymz1993阅读 4,066评论 2 104
  • 本文翻译自维基百科认知偏见系列List of cognitive biases之Ambiguity effect。...
    Y先生说阅读 2,035评论 0 2