Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:Gallery Widget的性能很糟糕,有什么原因吗?_Android_Android Gallery - Fatal编程技术网

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

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

我有一个Android Gallery小部件,它可以显示多个图像视图和来自web的图片。图像存储为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;
        }

如果您正在从活动中调用
getBitmapFromURL
,则可能会阻塞UI线程。确保此代码在单独的线程或异步任务中运行。您可能还希望在WeakHashmap中缓存位图。在从网络抓取图像之前,请检查缓存中的图像。

以下是一些可能很方便的提示:

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

<> P>这是一个有趣的例子,你可以使用

< P>另一个项目也是动画持续时间。您可以将其设置为0,这将有助于提高滚动性能。我最近需要用我正在开发的谷歌电视应用程序来实现这一点,否则会有一两秒钟的停顿。还建议预缓存您的图像,并尽可能减少一次显示的图像数量。

您如何加载“来自web的图片”?这看起来很混乱,原始问题中的发布代码:您是否也可以显示调用getBitmapFromURL的位置?只是一个一般性建议:如果可能,请测量其速度变慢的位置,这通常比猜测和尝试更快。这里有一个很好的使用traceview的教程:谢谢你alextsc!我一直在寻找一个类似的工具!非常感谢。我认为这就是问题所在。我将在后台线程中下载并缓存所有图像,然后在getView()中从缓存中简单地抓取图像;我想我重新下载图片的次数太多了,并且使用UI线程来做这件事-我将尝试缓存图片。你的回答基本上是正确的,很抱歉我无法升级投票或标记为正确的(另一个人首先帮助我),但谢谢你!