【Android】Intent传递数据量过大的问题android.os.TransactionTooLargeException
在做相册多选时,相册选择界面跳转预览界面时需要通过Intent将所有照片的数据传递给PreviewActivity(预览界面),而当数据量大的时候程序会崩溃,错误信息是android.os.TransactionTooLargeException,后来通过查阅官方资料(https://developer.android.com/reference/android/os/TransactionTooLargeException.html)发现Inetent、Bundle等传递数据时有一个缓冲区,而这个缓冲区最大只有1MB,所以当数据量大时会出现如上错误。这个时候就不能通过Intent来传递数据了。可以使用WeakReference将数据临时保存一下,这也不会影响到GC。代码如下:
public class WeakDataHolder {
private static WeakDataHolder instance;
public static WeakDataHolder getInstance(){
if(instance == null){
synchronized (WeakDataHolder.class) {
if (instance == null) {
instance = new WeakDataHolder();
}
}
}
return instance;
}
private Map<String, WeakReference<Object>> map = new HashMap<>();
/**
* 数据存储
* @param id
* @param object
*/
public void saveData(String id, Object object) {
map.put(id, new WeakReference<>(object));
}
/**
* 获取数据
* @param id
* @return
*/
public Object getData(String id) {
WeakReference<Object> weakReference = map.get(id);
return weakReference.get();
}
然后在需要传递数据的地方调用save()方法:
// 照片路径集合List<LocalMedia> previewImages;
WeakDataHolder.getInstance().saveData("2", previewImages);
最后在PreviewActivity调用get()方法获取照片数据:
images = (List<LocalMedia>) WeakDataHolder.getInstance().getData("2");
---------------------
作者:dayun220
来源:CSDN
原文:https://blog.csdn.net/dayun220/article/details/77720473
版权声明:本文为博主原创文章,转载请附上博文链接!
【Android】Intent传递数据量过大的问题android.os.TransactionTooLargeException相关推荐
- Android底层隐私数据,Android Intent传递数据底层分析详细介绍_Android_脚本之家
Android Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...
- android中intent放数据类型,Android Intent传递数据底层分析详细介绍
Android Intent传递数据底层分析详细介绍 我们知道在Activity切换时,如果需要向下一个ActivityB传递数据,可以借助Intent对象的putExtra方法. 但是不知各位有没 ...
- android intent传递数据
说到intent传递数据,其实我是经常用到,不过之前用的都是简单的传递String,int,boolean的简单数据.昨天,我需要传递一个自定义的实体类时,发现自己不会,所以在网上搜索了一些资料,自己 ...
- 【转】Android 之最新最全的Intent传递数据方法
原文地址:https://www.jianshu.com/p/1169dba99261 intent传递数据 为什么要和intent单独拿出来讲,因为Intent传递数据也是非常重要的 一.简单的传递 ...
- Android之Intent传递数据
1.Android中的Intent对象中包含了多个putXXX()方法(如putExtra()方法)用来插入不同类型的额外数据,也包含了多个getXXX()方法(如getStringExtra().g ...
- Android学习之利用Intent传递数据
你能通过这篇文章学习到什么? 1. 利用intent在两个activity之间传递数据 2. 利用intent在两个activity之间传递数据包 3. 利用intent获取到返回数据 很多人在刚开始 ...
- 第9条:用生成器表达式来改写数据量较大的列表推导式
核心知识点: (1)当输入的数据量较大时,列表推导可能会因为占用太多内存而出问题. (2)由生成器表达式所返回的迭代器,可以逐次产生输出值,从而避免内存用量问题. (3)把某个生成器表达式所返回的迭代 ...
- Intent传递数据时,可以传递哪些类型数据
Intent传递数据时,下列的数据类型哪些可以被传递(abcd)(多选) A.Serializable B.charsequence C.Parcelable D.Bundle 除了上面的还能传递 ...
- rdd数据存内存 数据量_大数据开发-Spark调优常用手段
Spark调优 spark调优常见手段,在生产中常常会遇到各种各样的问题,有事前原因,有事中原因,也有不规范原因,spark调优总结下来可以从下面几个点来调优. 1. 分配更多的资源 分配更多的资源: ...
最新文章
- python公共键_Python利用公共键如何对字典列表进行排序详解
- 汇编 div_Solidity汇编开发简明教程
- App Class Loader
- 我的C#/.NET学习诀窍——LINQPad
- unity3d 求两个点长度_三年级上册求组合图形周长专项练习,附答案
- C#/.net 中的事件与代理
- 算法: 用队列Queue实现栈Stack
- git工作流学习记录
- MinGW gcc下载链接及sjlj、dwarf、seh异同以及gcc安装
- 【多任务模型】Progressive Layered Extraction: A Novel Multi-Task Learning Model for Personalized(RecSys‘20)
- 基于Java的网上商城系统
- 2022-2028年全球与中国各向异性导电胶行业市场前瞻与投资战略规划分析
- 如何用漫画说明 XSS 和 CSRF 的区别?
- 08canvas画图
- Mackevision 发布 2016 年回顾与展望
- Java计算器编程代码
- MODBUS调试工具(modscan32)使用说明
- java性能调优jstat使用方法
- linux内存耗尽实验,linux 内存耗尽的分析
- Arduino学习笔记:串口中断