2011-04-05 66 views
0

我正在开发一个小型的社交网络应用程序,使用像个人资料图片。图像存储在服务器上,我设置了脚本,将每个用户的图像发送到应用程序,然后将应用程序显示在每个用户的图像视图中,然后将图像保存到外部存储器。我现在实现的方式是,只要应用程序从服务器下载图像后需要图像,应用程序就会从外部存储器获取图像,除非用户上传了新图像(我认为这会比重新下载图像更快从服务器每次)。然而,从外部存储获取文件似乎要比从我的服务器上获取文件需要更长的时间(并且服务器非常慢,运行在3层以外的wifi上......预算限制:))。最快的地方检索Android中的图像

我的问题是如果用户没有上传新图片,最快的方法是获取这些图片。我应该每次都从服务器下载它(我假设没有)或者在文件系统中有更好的位置来存储图像以便更快地检索?

+0

你是如何存储图像? – 2011-04-05 22:38:55

+0

我得到一个InputStream使用一个URLHttpConnection到服务器上的图像,然后我在android上创建一个新文件,就像这个“new File(callingComponent.getExternalFilesDir(”DIRECTORY PICTURES“),username +”.jpg“);”,然后我从InputStream获得一个byte [],并使用OutputStream将其写入文件 – Eliezer 2011-04-06 01:01:14

回答

2

从SD卡载入图像应该非常快。一些策略:

  1. 做它只有一次 - 加载图片到内存异步的活动或应用程序启动时。每次视图更新时,您都不希望碰到SD卡。
  2. 使它们变小 - 如果您在显示列表中显示缩略图时出现性能问题,请尝试使用inSampleSize将缩略图保存为较小的图像,以减轻解码器的压力。
  3. 使用内部存储器 - 我认为内部存储器更快,但它往往是供不应求。您当然可以在您的cache directory中存储一些缩略图,以帮助加快步骤1.
  4. 对性能的响应性 - 黄金法则是记住绝对性能并不总是与响应性相关。即使图片需要很长时间才能加载,选择加载图片会对用户的速度感受产生很大的影响。
+0

Ok,所以我意识到问题在于当我试图从SD卡加载图像时,BitmapFactory.decodeStream返回null,因为显然存在一个bug当使用InputStream和BitmapFactory.decodeStream时。我解决了这个问题,现在平均需要14秒从服务器上下载10张图像,保存并显示它们,当它从SD卡上读取时,无论我设置的是SampleSample大小还是8秒,或者如果我压缩该文件的质量为10.这是我可以从SD卡希望最好的?我只是试图获得我现在可以获得的最有效的时间 – Eliezer 2011-04-06 04:02:27

+0

您是否尝试在缓存目录中缓存缩略图?加载8秒钟需要多少张图片? – 2011-04-06 04:11:06

+0

啊,我知道我忘了尝试一些:)我明天会尝试,因为我已经关闭了Eclipse。从SD卡上加载10张图像需要8秒钟的时间。 – Eliezer 2011-04-06 04:13:03