Unchecked cast: 'java.io.Serializable' to 'java.util.List<com.businessstore.model.PictureInfo>'
pictureInfoList = (List<PictureInfo>) getIntent().getSerializableExtra("editor_picture");

我用了Serializable使PictureInfo类序列化

//传入时
List<PictureInfo> pictureInfoList= mList.get(position).getPictureInfo();
ArrayList<PictureInfo> maList = new ArrayList<>(pictureInfoList);
Intent editor = new Intent(MainActivity.this,CommodityUploadActivity.class);
editor.putParcelableArrayListExtra("editor_picture",maList);
startActivity(editor);
//取出时
List<PictureInfo> pictureInfoList = getIntent().getParcelableArrayListExtra("editor_picture");

Parcelable的使用没Serializable那么简单,但是也有捷径可走。
安装插件:

两者的实现差异:

Serializable的实现,只需要实现Serializable接口即可。这只是给对象打了一个标记(UID),系统会自动将其序列化。而Parcelabel的实现,不仅需要实现Parcelabel接口,还需要在类中添加一个静态成员变量CREATOR,这个变量需要实现 Parcelable.Creator接口,并实现读写的抽象方法。

两者的设计初衷:

Serializable的设计初衷是为了序列化对象到本地文件、数据库、网络流、RMI以便数据传输,当然这种传输可以是程序内的也可以是两个程序间的。而Android的Parcelable的设计初衷是由于Serializable效率过低,消耗大,而android中数据传递主要是在内存环境中(内存属于android中的稀有资源),因此Parcelable的出现为了满足数据在内存中低开销而且高效地传递问题。

两者的效率选择:

Parcelable的性能比Serializable好,在内存开销方面较小,所以Android应用程序在内存间数据传输时推荐使用Parcelable,如activity间传输数据和AIDL数据传递,而Serializable将数据持久化的操作方便,因此在将对象序列化到存储设置中或将对象序列化后通过网络传输时建议选择SerializableParcelable也是可以,只不过实现和操作过程过于麻烦并且为了防止android版本不同而导致Parcelable可能不同的情况,因此在序列化到存储设备或者网络传输方面还是尽量选择Serializable接口)。