Serializable和Parcelable
Serializable(接口)
通过intent的bundle传递参数
Bundlebundle=newBundle();
bundle.putSerializable(IntentKeys.IMG_ARR_ENVIR_IMG,mArrListEnvir_img);
intent.putExtras(bundle);
mListEnvir=(ArrayList<EnvirImg>)(bundle
.getSerializable(IntentKeys.IMG_ARR_ENVIR_IMG));
Parcelable(接口)
通过intent的bundle传递参数
Bundlebundle=newBundle();
bundle.putParcelable(IntentKeys.IMG_ARR_ENVIR_IMG,mArrListEnvir_img);
intent.putExtras(bundle);
importandroid.graphics.Bitmap;
importandroid.os.Parcel;
importandroid.os.Parcelable;
publicclassUploadPicimplementsParcelable{
privateStringid;
privateStringsdPath;
privateStringwebPath;
privateBitmapbmp;
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicStringgetSdPath(){
returnsdPath;
}
publicvoidsetSdPath(StringsdPath){
this.sdPath=sdPath;
}
publicStringgetWebPath(){
returnwebPath;
}
publicvoidsetWebPath(StringwebPath){
this.webPath=webPath;
}
publicBitmapgetBmp(){
returnbmp;
}
publicvoidsetBmp(Bitmapbmp){
this.bmp=bmp;
}
@Override
publicintdescribeContents(){
return0;
}
@Override
publicvoidwriteToParcel(Parcelparcel,intflags){
parcel.writeString(id);
parcel.writeString(sdPath);
parcel.writeString(webPath);
bmp.writeToParcel(parcel,0);
}
publicstaticfinalParcelable.Creator<UploadPic>CREATOR=newCreator<UploadPic>(){
publicUploadPiccreateFromParcel(Parcelsource){
UploadPicpic=newUploadPic();
pic.id=source.readString();
pic.sdPath=source.readString();
pic.webPath=source.readString();//传递string数据
pic.bmp=Bitmap.CREATOR.createFromParcel(source);//传递bitmap数据
returnpic;
}
publicUploadPic[]newArray(intsize){
returnnewUploadPic[size];
}
};
}
Parcelable比Serializable效率高
parcelable也不适合传输大量图片数据
android.os.TransactionTooLargeException不适合传大量数据尤其bitmapintent跳转的时候无缝传递数据pacicl
导致原因是:Binder传输的数据太大
如果Binder的参数或返回值太大,不适合的事务缓冲区,然后调用将失败,并将被抛出TransactionTooLargeException。
解决方法:
不要将大量数据传入Binder
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。