2010-08-11 26 views

回答

1

这里有几个不同的选择。

我想通过“下一页”你的意思是下一个活动?我也假设你已经创建了一个Bitmap的图像。 Bitmap implements Parcelable,所以你可以直接把它放入意图的附加部分。这也可以让你在你的活动的onSaveInstanceState()方法中将它放入Bundle,所以无论何时该活动被旋转或由于其他原因而被重新创建,它都会被恢复。

不过,如果你有一个以上的图像,这是不太理想的,因为你必须序列,并在每次切换活动时间反序列化的所有图片。如果你获得从文件系统图像的某个地方,或者如果你从ContentProvider得到它像MediaStore,那么你就必须为它Uri。因此,您可以将Uri作为意图,然后在每次加载活动时重新创建位图。这具有序列化数据量较小的优点,但在处理方面更糟糕,因为现在必须从文件系统读取数据并每次解压缩图像。

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

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

+0

是否为字符串值的方法相同? – User358218 2010-08-11 03:20:41

+0

是的,你可以将它添加到意图的演员,或者你将它存储在一个静态变量。这是两个活动共享数据,任何类型数据的唯一途径。至少对于字符串来说,将它们序列化并且它们不占用太多内存是很快的,所以通过将它们放入意图中,你确实没有任何损失。 – 2010-08-11 03:50:02

+0

我还应该补充说,如果你不需要多个活动来共享一个对象,但是当由于旋转而重新创建活动时你确实需要保留这个对象,那么你应该检查Activity.onRetainNonConfigurationInstance()方法。 http://developer.android.com/reference/android/app/Activity.html#onRetainNonConfigurationInstance – 2010-08-11 03:54:04

0

您是否有传递图片值的示例代码? 这工作?

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

不,你不会自己创建'Bundle',它已经由意图创建了。只需像这样添加你的图像:'i.putExtra(“image”,img)'...但是,不要这样做,我会接受上面的Josh的建议,并将其存储在全局静态变量的某处。 – 2010-08-11 15:25:15

+0

噢,好的谢谢。但是全局静态变量方法对我来说非常复杂。我对android非常陌生。 – UserA 2010-08-12 02:42:41