Android 中使用Bundle传递大容量数据问题
2017-11-16 09:42
344 查看
在Activity或者组件之前传递信息时,一般采用intent绑定bundle的方式传值,在使用过程中需要注意的是不要用bundle传递大容量数据:
在做项目的过程中,发现使用bundle在两个Activity之间传递数据的时候,有时候第二个Activity根本就显示不出来,刚开始以为是第二个Activity的布局出了问题,可怎么调整也发现解决不了问题,然后注释掉了一个往bundle里put数据的代码,发现立即正常了,经过分析发现是由于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传递这些数据的问题:
方法一:将需要传递的数据写在临时文件或者数据库中,再跳转到另外一个组件的时候再去读取这些数据信息,这种处理方式会由于读写文件较为耗时导致程序运行效率较低;
方法二:将需要传递的数据信息封装在一个静态的类中(注意当前组件和要跳转到的组件必须属于同一个进程,因为进程之间才能够共享数据),在当前组件中为类设置内容,然后再跳转到的组件中去取,这种处理方式效率很高,但是会破坏程序的独立性。
具体采用哪种替代方式取决于具体的情况,我比较喜欢采取第二种处理方式,因为这样会大大提高程序的运行效率,至于程序的独立性,看你怎么去封装这个类了。
在做项目的过程中,发现使用bundle在两个Activity之间传递数据的时候,有时候第二个Activity根本就显示不出来,刚开始以为是第二个Activity的布局出了问题,可怎么调整也发现解决不了问题,然后注释掉了一个往bundle里put数据的代码,发现立即正常了,经过分析发现是由于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 中使用Bundle传递大容量数据问题
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- 【Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用】的改进!
- Android两个Activity跳转并使用Bundle传递数据
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递 Android内存优化(使用SparseArray和ArrayMap代替HashMap)
- android使用Intent传递数据 2 种方式(Intent和Bundle)
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递?
- Android 使用Intent和Bundle传递数据及如何传递enum
- Android使用Bundle进行数据传递分析
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- Android笔记 Application对象的使用-数据传递以及内存泄漏问题
- Android中级教程之(五)----->不同Activity之间的数据传递,Bundle对象的使用!
- Android使用intent、bundle传递数据
- Android中级教程(三)之不同Activity之间的数据传递---Bundle对象的使用!
- Android笔记三.不同Activity之间的传递数据(Bundle对象的使用)
- android - Application对象的使用-数据传递以及内存泄漏问题
- Android为什么要设计出Bundle而不是直接使用HashMap来进行数据传递
- Android 使用Bundle在Activity间传递数据