Intent附加(Extra)大小限制

Intent是Android系统中十分重要的部分,负担着不同组件之间的沟通桥梁,它可以携带数据,从一个组件传递到另一个组件中。

在做一个图库部分的时候,根据网络传输来的图片状态列表,展示一个网格状的图库,点击之后进入一个由ViewPager为主的大图查看Activity。这个时候需要将整个图片状态列表传递给大图查看Activity。

最初,我使用intent.putParcelableArrayListExtra将整个状态列表传送给大图查看Activity,运转正常。但是在某些查看一些很靠后图片的时候,就出现了整个崩溃,回到最原始Activity的情况。

经过查找资料,Intent(包括Bundle一共)大小限制为不到1MB,所以在超过这个限制之后,就会出现静默崩溃的现象,解决方案两种:

一、写入临时文件或者数据库,通过FileProvider将该文件或者数据库通过Uri发送至目标。一般适用于不同进程,比如分离进程的UI和后台服务,或不同的App之间。之所以采用FileProvider是因为7.0以后,对分享本App文件存在着严格的权限检查。

二、通过设置静态类中的静态变量进行数据交换。一般适用于同一进程内,这样本质上数据在内存中只存在一份,通过静态类进行传递。需要注意的是进行数据校对,以防多线程Data Racer出现导致的数据显示混乱。