在活动之间共享大量数据

时间:2015-02-23 08:50:36

标签: android parcelable

我有一个可以发送一些相机预览信息的parcelable类。所以我需要从一个活动向另一个活动发送几个byte []数据。我正在使用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;
    }
};
}

这个Parcelable课程正常。但是当我尝试发送更多数据时,通信Intent无效,因为我超出了最大数据量。

我通过一些可以解决问题的方法阅读this linkthis other link。但我想知道是否可以使用Parcelable发送更多数据,如果没有,上述哪种方式最适合。

谢谢。

1 个答案:

答案 0 :(得分:2)

使用单例或静态类来存储共享数据。


编辑:

根据我的经验,这种做法不那么痛苦,但是,在你发布的第一个链接上说:

  

通过定义全球化,有几个建议可以实现这一目标   变量,静态字段,成员变量等。调整过   为了得到干净的封装代码,我决定实现它   使用Java枚举。

它使用enum作为DataHolder:

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;
    }
}

我个人更喜欢实现Singleton类,因为代码在不同的类中看起来更整洁(我对此有点痴迷),但这基本上是相同的。任何其他解决方案也可以。