我有一个Android图库小部件,可以显示多个带有来自网络图片的ImageView。图像存储为jpgs,并在添加到ImageView之前转换为位图。每个jpg是8kb。我没有对图像进行任何缩放。
当我使用带有1或2张图片的图库时,它工作正常,滚动顺畅等等.3,它开始变得有点不连贯,在5或10张图片时,应用程序几乎无法使用。
有没有人对于为什么表现如此糟糕有任何想法?有没有人有替代品的建议?谢谢 -
@elevine:我从jpg网址构建位图的方法:
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;
}
答案 0 :(得分:1)
如果您从Activity调用getBitmapFromURL
,那么它可能会阻止UI线程。确保此代码在单独的线程或AsyncTask内运行。您可能还想在WeakHashmap中缓存位图。在从网络抓取之前检查缓存中的图像。
答案 1 :(得分:1)
以下是一些可能会派上用场的提示:
以下是您可能会使用的有趣ImageManager
答案 2 :(得分:1)
另外一个要考虑的项目是animationDuration。您可以将其设置为0,这将有助于滚动性能。我最近需要使用我正在处理的Google TV应用程序执行此操作,否则会暂停一两次。还建议预先缓存图像,并尽可能减少一次显示的图像数量。