Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 传递图像值的方法?_Android_Eclipse_Image - Fatal编程技术网

Android 传递图像值的方法?

Android 传递图像值的方法?,android,eclipse,image,Android,Eclipse,Image,我如何将图像传递到android的下一页?这里有一些不同的选择 我猜“下一页”是指下一个活动?我还假设您已经从图像中创建了一个位图位图实现了可包裹,因此您可以直接将其放入意图的附加部分。这还允许您将其放入活动的onSaveInstanceState()方法的Bundle中,因此每当该活动被旋转或出于其他原因重新创建时,它都会被还原 但是,如果您有多个映像,这就不太理想,因为每次切换活动时都必须序列化和反序列化所有映像。如果您从文件系统的某个地方获得了图像,或者如果您从内容提供者如MediaSto

我如何将图像传递到android的下一页?

这里有一些不同的选择

我猜“下一页”是指下一个活动?我还假设您已经从图像中创建了一个
位图<代码>位图
实现了
可包裹
,因此您可以直接将其放入意图的附加部分。这还允许您将其放入活动的
onSaveInstanceState()
方法的
Bundle
中,因此每当该活动被旋转或出于其他原因重新创建时,它都会被还原

但是,如果您有多个映像,这就不太理想,因为每次切换活动时都必须序列化和反序列化所有映像。如果您从文件系统的某个地方获得了图像,或者如果您从
内容提供者
MediaStore
获得了图像,那么您将拥有一个
Uri
。因此,您可以将
Uri
放在intent中,然后在每次加载活动时重新创建位图。这样做的优点是序列化数据量更小,但在处理方面更糟,因为现在每次都必须从文件系统读取并解压缩映像

因此,如果您关心性能,唯一好的方法是将映像存储到静态变量中,以便其他活动可以访问它。这样,两个活动实际上使用相同的图像,而不是复制它,从而节省内存。这种方法的唯一缺点是无法在新任务中启动活动。使用映像的所有活动必须在同一进程中运行。此外,如果在完成后手动回收图像(通过
Bitmap.recycle()
方法),则在回收图像之前,必须确保没有其他人在使用图像


就我个人而言,我的很多应用程序从服务器下载图像,我将所有HTTP响应存储在缓存中,因此每当我需要其中一个图像时,我都会从缓存中重新请求它。缓存是单例的,因此可以从我的任何活动访问它。

是否有传递图像值的示例代码? 这样行吗

Intent i = new Intent(Moods.this, New_Entry.class);
                    Bundle f = new Bundle();
                    f.putString("image", img);  

字符串值也是这样吗?是的,您可以将其添加到intent extras,也可以将其存储在静态变量中。这是两个活动共享数据的唯一方式,任何类型的数据。至少对于字符串来说,序列化它们的速度很快,而且它们不会占用太多内存,因此将它们放入intent中不会造成任何损失。我还应该补充一点,如果不需要多个Activite来共享一个对象,但在由于旋转而重新创建活动时,确实需要保留该对象,然后,您应该签出
Activity.onRetainonConfigurationInstance()
方法。您不应该通过bundle传递大型图像,一个bundle中可以传递的数据量是有限制的。使用图像的URI在另一侧重新创建图像或通过全局状态访问分配的位图是更好的方法。同意。我不知道实际上有一个限制+1不,您不需要自己创建
捆绑包,它已经由intent创建。只需像这样添加图像:
i.putExtra(“图像”,img)
。。。但是我不会这样做,而是采纳上面Josh的建议,将其存储在全局静态变量中的某个位置。哦,好的,谢谢。但是全局静态变量法对我来说非常复杂。我对android真的是个新手。