1

Webからの画像を含むいくつかのImageViewを表示するAndroidギャラリーウィジェットがあります。画像はjpgとして保存され、ImageViewsに追加される前にビットマップに変換されます。各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、UIスレッドをブロックしている可能性があります。このコードが別のスレッドまたはAsyncTask内で実行されていることを確認してください。また、WeakHashmap内にビットマップをキャッシュすることもできます。ネットワークから画像を取得する前に、キャッシュ内の画像を確認してください。

于 2011-08-19T23:16:54.273 に答える
1

ここに便利になるかもしれないいくつかのヒントがあります:

  • 最初にWeakReferenceを使用してメモリに画像をキャッシュし、可能であればディスクにもキャッシュしてみてください。そうすれば、画像をもう一度ダウンロードするときにモバイルリソースを浪費する必要がなくなります。
  • GalleryAdapterをオーバーライドし、アダプターがビューをリサイクルするのを支援していない場合、パフォーマンスが低下する可能性がありますリストアイテム
  • また、別のスレッドでダウンロード操作を実行してみてください。AsyncTaskの使用を検討してください。

これがあなたが使うかもしれない興味深いImageManagerです

于 2011-08-19T23:17:55.103 に答える
1

同様に考慮すべきもう1つの項目は、animationDurationです。これを0に設定すると、スクロールパフォーマンスに役立ちます。最近、作業中のGoogle TVアプリでこれを行う必要がありました。そうしないと、1、2秒休止しました。画像を事前にキャッシュすることもお勧めします。可能であれば、一度に表示される画像の数を減らしてください。

于 2013-01-14T17:17:18.880 に答える