Unchecked cast java.io.Serializable to ……
在清理警告时遇到了问题:
Activity之间传递List会出现警告,如下:
pictureInfoList = (List<PictureInfo>) getIntent().getSerializableExtra("editor_picture");
我用了Serializable
使PictureInfo类序列化
传递就有此警告,于是在这里查到了原因【需要翻墙】
大致意思就是需要使用性能更好,内存开销更少的Parcelable
使用Parcelable
消除了警告。
//传入时
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
那么简单,但是也有捷径可走。
安装插件:
然后
OK~然后用就行了
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将数据持久化的操作方便,因此在将对象序列化到存储设置中或将对象序列化后通过网络传输时建议选择Serializable
(Parcelable
也是可以,只不过实现和操作过程过于麻烦并且为了防止android版本不同而导致Parcelable
可能不同的情况,因此在序列化到存储设备或者网络传输方面还是尽量选择Serializable
接口)。
两者需要注意的共同点:
无论是
Parcelable
还是Serializable
,执行反序列操作后的对象都是新创建的,与原来的对象并不相同,只不过内容一样罢了。