Android开发经验之—intent传递大数据
在Activity或者组件之前传递信息时,一般採用intent绑定bundle的方式传值,但在使用过程中须要注意的是不要用bundle传递大容量数据:
在做项目的过程中,须要将听写界面的听写结果信息传递到听写记录界面供显示用,可是因为传递的数据量过大导致程序ANR,甚至直接报异常(传递的信息里面有bitmap转换成的byte数组、每个词组的拼音、词语、语音信息),经过分析发现是因为bundle不能传递大容量的数据信息,在stackoverflow里面查阅发现有同行遇到类似的问题:
(1)“The size limit of Intent is still pretty low in Jelly
Bean, which is somewhat lower than 1MB (around 90K), so you should always be cautious about your data length, even if your application targets
only latest Android versions.”
(2)“As per my experience (sometime ago), you are able to put up to 1MB of
data in a Bundleencapsulated
inside Intent.
I think, this restriction was valid up till Froyo or GingerBread.”
所以在通过bundle传递数据时仅仅能传递较小的数据信息,对于在不同组件之间须要传递大容量数据的情况时,有几种替代方式能够解决不能用bundle传递这些数据的问题:
方法一:将须要传递的数据写在暂时文件或者数据库中,再跳转到另外一个组件的时候再去读取这些数据信息,这样的处理方式会因为读写文件较为耗时导致程序执行效率较低;
方法二:将须要传递的数据信息封装在一个静态的类中(注意当前组件和要跳转到的组件必须属于同一个进程,由于进程之间才可以共享数据),在当前组件中为类设置内容,然后再跳转到的组件中去取,这样的处理方式效率非常高,可是会破坏程序的独立性。
详细採用哪种替代方式取决于详细的情况,本人建议採取另外一种处理方式,由于这样会大大提高程序的执行效率,至于程序的独立性,看你怎么去封装这个类了。
參考资料:
Android开发经验之—intent传递大数据的更多相关文章
- android中通过intent传递复杂数据
android中在各个service或者acitivity之间可以通过Intent来传递一些数据,intent原生直接提供了一些简单数据类型的数据的传递,使用起来也很方便,比如int boolean ...
- Android Intent不可传递大数据
今天用intent传递一个bitmap,结果一直出错,intent无法执行,原来是intent不能传递大数据导致的,具体是多大,不太清楚,但我传递的bitmap在1m以上.
- Activity之间传递大数据问题
Android开发人员都知道,Intent适用于在不同的Activity之间传递数据,包括参数.字符串.以及序列化的对象等.但是笔者所做的项目用到了使用Intent 传递Bitmap图片对象,图片的数 ...
- Activity之间使用intent传递大量数据带来问题总结
转载:大飞 http://blog.csdn.net/rflyee/article/details/47441405 Activity之间使用Parcel传递大量数据产生的问题. Activity ...
- 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 百篇博客分析OpenHarmony源码 | v33.02
百篇博客系列篇.本篇为: v33.xx 鸿蒙内核源码分析(消息队列篇) | 进程间如何异步传递大数据 | 51.c.h .o 进程通讯相关篇为: v26.xx 鸿蒙内核源码分析(自旋锁篇) | 自旋锁 ...
- Android 消息广播Intent传递数据
1.创建布局文件activity_broadcast.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk ...
- [Android] Android 最全 Intent 传递数据姿势
我们都是用过 Intent,用它来在组件之间传递数据,所以说 Intent 是组件之间通信的使者,一般情况下,我们传递的都是一些比较简单的数据,并且都是基本的数据类型,写法也比较简单,今天我在这里说的 ...
- CI框架中怎么传递大数据给PHP?
CI中怎么将HTML页面中的大数据(如富文本)通过CONTROLLER传递给MODEL中的函数?难道还是通过构造链接的形式传递吗?求指点.
- DataSnap 用TStream 传递大数据 返回流大小为-1的情况
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的.但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了. 官方有篇博客很详细的介绍 ...
随机推荐
- 已知一指针p,你可以确定该指针是否指向一个有效的对象吗?如果可以,如何确定?如果不可以,请说明原因。
这个问题我的思路是:首先用*p将其值输出来,如果编译器报错,证明p指向一个无效的对象,要么p=0要么p未进行初始化,此时可以用if(p == NULL)进行判断即可,不知道大家是否有好的思路噻...
- JIRA初步
JIRA 是澳大利亚 Atlassian 公司开发的一款优秀的问题跟踪管理软件工具.可以对各种类型的问题进行跟踪管理.包含缺陷.任务.需求.改进等.JIRA採用J2EE技术.可以跨平台部署.它正被广泛 ...
- (1)ActivityThread分析
1. 入口. 曾经一直都说Activity的人口是onCreate方法.事实上android上一个应用的入口,应该是ActivityThread.和普通的java类一样,入口是一个main方法. pu ...
- Swift Error fatal error: unexpectedly found nil while unwrapping an Optional value
致命的错误: 对一个为空的optional值进行解包. 强制解包(forced unwrapping): 在optional后面加叹号. 比如 "value!" 错误代码: le ...
- PHP - MySQL数据库
第15章 MySQL数据库 学习要点: 1.Web数据库概述 2.MySQL的操作 3.MySQL常用函数 4.SQL语句详解 5.phpMyadmin 一.Web数据库概述 现在,我们已经熟悉了PH ...
- Oracle 当前时间加减
当我们用 select sysdate+number from dual ;我们得到的是,当前的时间加上number天后的时间.从这里我们也可以看出,使用这种方式进行时间计算的时候,计算的单位是天, ...
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: 1 2 3 ...
- Hadoop学习之HBase
1. HBase有哪些基本的特征? 2. HBase相对于关系数据库能解决的问题是什么? 3. HBase的数据模型是什么?如何表述?有哪些操作形式? 4. HBase的模式Schema设计的一些概念 ...
- mac下进行配置android真机调试环境
学习android开发几天了,今天好不容易找了个android手机,直接连接mac电脑,结果eclipse-DDMS里面没有显示任何设备. 使用命令行adb devices 试了下,没设备列表. 郁闷 ...
- readline-6.3 之arm平台交叉编译
近期须要弄个CLI命令接口程序,初步设想是须要支持历史命令翻阅,tab键命令补全这种一个东西.经查阅相关文档,深耕百度一番!(google近期不太正常) 实在恼火.发现readline果真是个好东西, ...