1

我有一个 Android Gallery 小部件,它显示了几个带有来自网络的图片的 ImageView。图像存储为 jpg,并在添加到 ImageView 之前转换为位图。每个 jpg 为 8kb。我没有对图像进行任何缩放。

当我使用带有 1 或 2 张图片的图库时,它工作正常,滚动流畅等。使用 3 张时,它开始变得有点不稳定,而在 5 或 10 张图片时,应用程序几乎无法使用。

有没有人知道为什么性能如此糟糕?有人对替代品有建议吗?谢谢-

@elevine:我从 jpg url 构造位图的方法:

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;
        }
4

3 回答 3

1

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

于 2011-08-19T23:16:54.273 回答
1

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

  • 尝试先使用 Wea​​kReference 将图像缓存在内存上,然后再将图像缓存在磁盘上(如果可能的话),这样您就不必浪费移动资源重新下载图像了。
  • 如果您覆盖 GalleryAdapter 并且您没有帮助适配器回收您的视图列表项,则性能可能会很差
  • 也尝试在不同的线程上执行下载操作,考虑使用 AsyncTask。

这是您可能会使用的有趣的ImageManager

于 2011-08-19T23:17:55.103 回答
1

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

于 2013-01-14T17:17:18.880 回答