Android 是否可以通过意图将图像作为参数传递给活动?

Android 是否可以通过意图将图像作为参数传递给活动?,android,image,android-intent,Android,Image,Android Intent,是否可以将图像作为额外信息传递给活动? 对于字符串,它的工作方式如下: intent = new Intent(this, 2Activity.class); intent.putExtra("String", "xy"); startActivity(intent); 那么,对于一幅图像,有可能做到这一点吗?或者图像的内存是一个问题吗?通过intent传递的数据大小有限制,因此可能无法工作。通常的方法是传递图像的文件名或资源ID。问得好。首先,没有Image类,所以我不确定这是否是您包含的库

是否可以将
图像作为额外信息传递给活动?
对于字符串,它的工作方式如下:

intent = new Intent(this, 2Activity.class);
intent.putExtra("String", "xy");
startActivity(intent);

那么,对于一幅图像,有可能做到这一点吗?或者图像的内存是一个问题吗?

通过intent传递的数据大小有限制,因此可能无法工作。通常的方法是传递图像的文件名或资源ID。

问得好。首先,没有
Image
类,所以我不确定这是否是您包含的库中的内容。你是说位图吗

答案通常是不,你不能。该代码序列是一个进程间调用,通过Android的binder内核驱动程序传递参数。参数的大小有1MB的硬限制。如果你保持图像小,这是可能的,但是考虑到位图是图像的未压缩表示,所以即使你认为合理大小的图像在内存中也会相当大。还考虑到1MIB缓冲区为所有的IPC和您的进程共享。如果应用程序的其他组件正在执行IPC,则会减少可用缓冲区


考虑传递一个可用于读取图像数据的
ParcelFileDescriptor
,一个指向可提供图像数据的内容提供商的
content://
URI(请参阅),或者一个指向文件系统上图像数据的
文件://
URI。

当然可以。要么作为字符串,要么创建某种包装器并实现parcelable。。。也就是说位图已经可以打包了

但是不要这样做!这实际上花了我一次面试的时间。因为有1MB的限制。你的形象很可能会通过。您应该做的是将其保存为文件并传递URI。或者在应用层存储文件。传递URI,这是干净的方法

看这个


看看这个

正如其他人在这里解释的那样,记忆将是一个问题。要解决这个问题,您可以将图像存储在hashmap中,并在片段和活动之间传递密钥

您可以使用此包装器类将图像保存在内存中

public class DataWrapper {
private static final DataWrapper instance = new DataWrapper();
private final SparseArray<Object> map = new SparseArray<Object>();
private int currentKeyValue = 1;

public static DataWrapper getInstance() {
    return instance;
}

public int putData(final Object data) {
    ++currentKeyValue;
    map.put(currentKeyValue, data);
    return currentKeyValue;
}

public Object getData(final int key) {
    final Object ret = map.get(key);
    map.delete(key);

    return ret;
}
您可以像这样从包装器获取数据:

  final byte[] imageData;
  final int imageDataKey = DataWrapper.getInstance().putData(imageData);
  data.putExtra(EXTRA_IMAGE, imageDataKey);
final int imageDataKey = data.getIntExtra(CameraFragment.EXTRA_IMAGE, 0);
final byte[] data = (byte[]) DataWrapper.getInstance().getData(imageDataKey));

Android的
位图
已经是
可包裹的了
。如果数据不是
位图
,您可以将
字节[]
放入可打包的
包中。@JeffreyBlattman是的,我正要进行编辑。抓到了,可能是复制品