Android 在活动之间共享大量数据
我有一个parcelable类正在尝试发送一些相机预览信息。因此,我需要将多个字节[]数据从一个活动发送到另一个活动。我正在使用Android 在活动之间共享大量数据,android,parcelable,Android,Parcelable,我有一个parcelable类正在尝试发送一些相机预览信息。因此,我需要将多个字节[]数据从一个活动发送到另一个活动。我正在使用Parcelable与此代码: public class CameraResult implements Parcelable { private byte[] imagesList; public CameraResult() {} @Override public int describeContents() {
Parcelable
与此代码:
public class CameraResult implements Parcelable
{
private byte[] imagesList;
public CameraResult() {}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeByteArray(imagesList);
}
public byte[] getImageList() {
return imagesList;
}
public void setImageList(byte[] results) {
this.imagesList = results;
}
public static final Parcelable.Creator<CameraResult> CREATOR = new Creator<CameraResult>() {
@Override
public CameraResult[] newArray(int size) {
return new CameraResult[size];
}
@Override
public CameraResult createFromParcel(Parcel source) {
CameraResult toReturn = new CameraResult();
int imageListSize = source.readInt();
if (imageListSize != 0)
{
byte[] tempImageList = new byte[imageListSize];
source.readByteArray(tempImageList);
toReturn.setImageList(tempImageList);
}
return toReturn;
}
};
}
public类CameraResult实现可包裹
{
专用字节[]图像列表;
公共摄影机结果(){}
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
目标写入字节数组(ImageList);
}
公共字节[]getImageList(){
返回图像列表;
}
public void setImageList(字节[]结果){
this.imagesList=结果;
}
公共静态最终包裹。创建者=新创建者(){
@凌驾
公共摄影机结果[]新数组(整数大小){
返回新相机结果[大小];
}
@凌驾
公共摄影机结果createFromParcel(地块源){
CameraResult toReturn=新CameraResult();
int imageListSize=source.readInt();
如果(imageListSize!=0)
{
字节[]tempImageList=新字节[imageListSize];
source.readByteArray(tempImageList);
toReturn.setImageList(tempImageList);
}
回归回归;
}
};
}
这个Parcelable
类运行良好。但当我尝试发送更多数据时,通信Intent
不起作用,因为我超过了最大数据大小
我读了很多书,并提出了一些解决问题的方法。但是我想知道,是否可以使用Parcelable
发送更多的数据,如果不可以,上面提到的哪种方法是最合适的
谢谢。使用单例或静态类存储共享数据
编辑: 根据我的经验,这是做这件事不那么痛苦的方式,但是,在你发布的第一个链接上,它还说: 有几种建议可以通过定义全球范围来实现这一目标 变量、静态字段、成员变量等进行了调整 为了得到干净的封装代码,我决定实现它 使用javaenum 它使用
enum
作为数据持有者:
private enum DataHolder {
INSTANCE;
private List<Object> mObjectList;
public static boolean hasData() {
return INSTANCE.mObjectList != null;
}
public static void setData(final List<Object> objectList) {
INSTANCE.mObjectList = objectList;
}
public static List<Object> getData() {
final List<Object> retList = INSTANCE.mObjectList;
INSTANCE.mObjectList = null;
return retList;
}
}
私有枚举数据持有者{
实例;
私人名单;
公共静态布尔hasData(){
return INSTANCE.mObjectList!=null;
}
公共静态void setData(最终列表objectList){
INSTANCE.mObjectList=objectList;
}
公共静态列表getData(){
最终列表retList=INSTANCE.mObjectList;
INSTANCE.mObjectList=null;
返回列表;
}
}
我个人更喜欢实现一个单例类,因为在另一个类中代码看起来更整洁(我对此有点着迷),但基本上是一样的。任何其他解决方案都可以。作为建议,为什么不在一个常见活动中使用2个片段?这样,您就不能将该活动用于此表单通信,也不会涉及任何发送。\n由于某些原因,片段不可能被丢弃。因此,您推荐我链接的解决方案之一,没有办法实现共享大数据量的
Parcelable
?这是一个正确的答案,在活动、片段或视图中存储数据不是一个好的解决方案