Android:Gallery Widget性能很糟糕,有什么原因吗?

时间:2011-08-19 22:32:21

标签: android android-gallery

我有一个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;
        }

3 个答案:

答案 0 :(得分:1)

如果您从Activity调用getBitmapFromURL,那么它可能会阻止UI线程。确保此代码在单独的线程或AsyncTask内运行。您可能还想在WeakHashmap中缓存位图。在从网络抓取之前检查缓存中的图像。

答案 1 :(得分:1)

以下是一些可能会派上用场的提示:

  • 尝试使用WeakReference以及磁盘(如果可能)将图像首先缓存在内存中,这样您就不必浪费移动资源重新下载图像。
  • 如果您覆盖GalleryAdapter并且您没有帮助适配器回收您的视图列表项
  • ,性能可能会很糟糕
  • 还尝试在不同的线程上执行下载操作,请考虑使用AsyncTask。

以下是您可能会使用的有趣ImageManager

答案 2 :(得分:1)

另外一个要考虑的项目是animationDuration。您可以将其设置为0,这将有助于滚动性能。我最近需要使用我正在处理的Google TV应用程序执行此操作,否则会暂停一两次。还建议预先缓存图像,并尽可能减少一次显示的图像数量。