Android:Gallery Widget的性能很糟糕,有什么原因吗?
我有一个Android Gallery小部件,它可以显示多个图像视图和来自web的图片。图像存储为JPG,并在添加到ImageView之前转换为位图。每个jpg是8kb。我没有在图像上做任何缩放 当我使用带有1或2张图片的图库时,它运行良好,滚动平滑,等等。使用3张图片时,它开始变得有点不稳定,在5或10张图片时,应用程序几乎无法使用 有人知道为什么演出这么差吗?有人对替代方案有什么建议吗?多谢各位- @elevine:我从jpg url构造位图的方法:Android:Gallery Widget的性能很糟糕,有什么原因吗?,android,android-gallery,Android,Android Gallery,我有一个Android Gallery小部件,它可以显示多个图像视图和来自web的图片。图像存储为JPG,并在添加到ImageView之前转换为位图。每个jpg是8kb。我没有在图像上做任何缩放 当我使用带有1或2张图片的图库时,它运行良好,滚动平滑,等等。使用3张图片时,它开始变得有点不稳定,在5或10张图片时,应用程序几乎无法使用 有人知道为什么演出这么差吗?有人对替代方案有什么建议吗?多谢各位- @elevine:我从jpg url构造位图的方法: private Bitmap getBi
private Bitmap getBitmapFromURL(String input) throws IOException {
URL url = new URL(input);
URLConnection conn = url.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
return bm;
}
这是来自ImageAdapter的getView方法。我开始怀疑这就是我的问题所在。。。我抓取图像的次数太多了吗?谢谢你的帮助
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
Bitmap bm;
try {
imageView.setImageBitmap(getBitmapFromURL(urls.get(position)));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//mageView.
imageView.setScaleType(ImageView.ScaleType.FIT_CENTER);
imageView.setLayoutParams(new Gallery.LayoutParams(100,100));
return imageView;
}
如果您正在从活动中调用
getBitmapFromURL
,则可能会阻塞UI线程。确保此代码在单独的线程或异步任务中运行。您可能还希望在WeakHashmap中缓存位图。在从网络抓取图像之前,请检查缓存中的图像。以下是一些可能很方便的提示:
- 尝试先用WeakReference将图像缓存在内存中,然后再缓存在磁盘上(如果可能的话),这样就不必浪费移动资源重新下载图像
- 如果覆盖GalleryAdapter并且不帮助适配器回收视图列表项,则性能可能会很差
<> P>这是一个有趣的例子,你可以使用 < P>另一个项目也是动画持续时间。您可以将其设置为0,这将有助于提高滚动性能。我最近需要用我正在开发的谷歌电视应用程序来实现这一点,否则会有一两秒钟的停顿。还建议预缓存您的图像,并尽可能减少一次显示的图像数量。您如何加载“来自web的图片”?这看起来很混乱,原始问题中的发布代码:您是否也可以显示调用getBitmapFromURL的位置?只是一个一般性建议:如果可能,请测量其速度变慢的位置,这通常比猜测和尝试更快。这里有一个很好的使用traceview的教程:谢谢你alextsc!我一直在寻找一个类似的工具!非常感谢。我认为这就是问题所在。我将在后台线程中下载并缓存所有图像,然后在getView()中从缓存中简单地抓取图像;我想我重新下载图片的次数太多了,并且使用UI线程来做这件事-我将尝试缓存图片。你的回答基本上是正确的,很抱歉我无法升级投票或标记为正确的(另一个人首先帮助我),但谢谢你!