在活动之间共享大量数据
Share large data amount between activities
我有一个 parcelable class 正在尝试发送一些相机预览信息。所以我需要将几个 byte[] 数据从一个 activity 发送到另一个。我将 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
class 工作正常。但是当我尝试发送更多数据时,通信 Intent
无法正常工作,因为我超出了最大数据大小。
我阅读了 this link and this other link 的一些假设方法来解决我的问题。但我想知道是否可以使用 Parcelable
发送更多的数据,如果不能,上述哪种方法最合适。
谢谢。
使用单例或静态class来存储共享数据。
编辑:
根据我的经验,这是做这种事情的不那么痛苦的方法,但是,同样,在您发布的第一个 link 上说:
There are several suggestions to achieve this, through defining global
variables, static fields, member variables, etc. Having tweaked those
ones a bit to get clean encapsulated code, I decided to implement it
using Java enum.
它使用 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 class,因为在不同的 class 中代码似乎更整洁(我对此有点着迷),但这基本上是一样的。任何其他解决方案也可以。
我有一个 parcelable class 正在尝试发送一些相机预览信息。所以我需要将几个 byte[] 数据从一个 activity 发送到另一个。我将 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
class 工作正常。但是当我尝试发送更多数据时,通信 Intent
无法正常工作,因为我超出了最大数据大小。
我阅读了 this link and this other link 的一些假设方法来解决我的问题。但我想知道是否可以使用 Parcelable
发送更多的数据,如果不能,上述哪种方法最合适。
谢谢。
使用单例或静态class来存储共享数据。
编辑:
根据我的经验,这是做这种事情的不那么痛苦的方法,但是,同样,在您发布的第一个 link 上说:
There are several suggestions to achieve this, through defining global variables, static fields, member variables, etc. Having tweaked those ones a bit to get clean encapsulated code, I decided to implement it using Java enum.
它使用 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 class,因为在不同的 class 中代码似乎更整洁(我对此有点着迷),但这基本上是一样的。任何其他解决方案也可以。