在Activity间传递的数据一般比较简单,可是有时分实践开发中也会传一些比较复杂的数据,尤其是面试问道当遇到需求在Activity间传递很多的数据怎么办?

Intent 传递数据的巨细是有约束的,它大约能传的数据是1M-8K,原因是Binder锁映射的内存巨细便是1M-8K.一般activity间传递数据会要运用到binder,因此这个就成为了数据传递的巨细的约束。那么当activity间要传递大数据选用什么方法呢?其实方法很多,咱们就举几个比方给咱们说明一下,可是无非便是运用数据耐久化,或者内存同享计划。一般大数据的存储不适宜运用SP, MMKV,DataStore。

Activity之间传递很多数据主要有如下几种方法完成:
  • LruCache
  • 耐久化(sqlite、file等)
  • 匿名同享内存
运用LruCache

LruCache是一种缓存战略,能够协助咱们管理缓存,想具体了解的同学能够去Glide章节中具体先了解下。在当时的问题下,咱们能够利用LruCache存储咱们数据作为一个中转,比方咱们需求Activity A向Activity B传递很多数据,咱们能够Activity A先向LruCache先写入数据,之后Activity B从LruCache读取。

首要咱们界说好写入读出规则:

public interface IOHandler {
  //保存数据
  void put(String key, String value);
  void put(String key, int value);
  void put(String key, double value);
  void put(String key, float value);
  void put(String key, boolean value);
  void put(String key, Object value);
​
  //读取数据
  String getString(String key);
  double getDouble(String key);
  boolean getBoolean(String key);
  float getFloat(String key);
  int getInt(String key);
  Object getObject(String key);
}

咱们能够依据规则也便是接口,写出具体的完成类。完成类中咱们保存数据运用到LruCache,这里边咱们一定要设置一个巨细,因为内存中数据的最大值是确定,咱们保存数据的巨细最好不要超越最大值的1/8.

LruCache<String, Object> mCache = new LruCache<>( 10 * 1024*1024);

写入数据咱们运用比较简单:

@Override
public void put(String key, String value) {
  mCache.put(key, value);
}

比方上面写入String类型的数据,只需求接收到的数据悉数put到mCache中去。

读取数据也是比较简单方便:

@Override
public String getString(String key) {
  return String.valueOf(mCache.get(key));
}
耐久化数据

那便是sqlite、file等方法。将需求传递的数据写在临时文件或者数据库中,再跳转到别的一个组件的时分再去读取这些数据信息,这种处理方法会因为读写文件较为耗时导致程序运行功率较低。这种方法特色如下:

优势:

(1)使用中悉数地方均能够访问

(2)即使使用被强杀也不是问题了

缺点:

(1)操做费事

(2)功率低下

匿名同享内存

在跨进程传递大数据的时分,咱们一般会选用binder传递数据,可是Binder只能传递1M一下的数据,所以咱们需求选用其他方法完成数据的传递,这个方法便是匿名同享内存。

Anonymous Shared Memory 匿名同享内存」是 Android 特有的内存同享机制,它能够将指定的物理内存别离映射到各个进程自己的虚拟地址空间中,然后便捷的完成进程间内存同享。

Android 上层提供了一些内存同享东西类,便是根据 Ashmem 来完成的,比方 MemoryFile、 SharedMemory。

今日分享到此结束,对你有协助的话,点个赞再走呗,每日一个面试小技巧

关注大众号:Android老皮
解锁 《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版

内容如下

1.Android车载使用开发体系学习指南(附项目实战)
2.Android Framework学习指南,助力成为体系级开发高手
3.2023最新Android中高级面试题汇总+解析,离别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨渠道首要之选
7.Kotlin从入门到实战,全方面提升架构根底
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360全方面性能调优
10.Android零根底入门到精通,高手进阶之路