1

私はアンドロイドにアプリケーションを持っていますimageflipper. 問題は、約 8 枚の画像をメモリにロードした後、メモリ不足エラーが発生することです。

ユーザーが 2 つの画像を反転すると、次の 2 つをメモリに読み込み、最初の 2 つを削除するように、動的な画像の読み込みを試みました。ある程度は機能しますが、醜く、ユーザーが画像を裏返すと問題が発生します( imageflipper.showprevious())。

すべての画像を移動して新しい画像を最初に配置することはできません。

私の質問は次のとおり
です。この種のことを行うためのより良い方法はありますか? 画像のサイズ変更はあまり役に立ちませんでした。

4

2 に答える 2

0

isRecycled()以下のコード スニペットを使用して、メモリ関連の問題を解決しました。メソッドの助けを借りて、この問題を克服できます。このコードをあなたのものに追加してください。ここfinalImageに私BitmapDrawableR.id.image_viewer画像ビューがあります。あなたのものに変更できます

 @Override
        protected void onDestroy() {

             finalImage.setCallback(null);
             if (!((BitmapDrawable) finalImage).getBitmap().isRecycled()) {
             ((BitmapDrawable) finalImage).getBitmap().recycle();
             }
             finalImage = null;
            unbindDrawables(findViewById(R.id.image_viewer));
            Runtime.getRuntime().gc();
            // scaledBitmap.recycle();
            System.gc();
            super.onDestroy();
        }

        private void unbindDrawables(View view) {
            if (view.getBackground() != null) {
                view.getBackground().setCallback(null);
            }
            if (view instanceof ViewGroup) {
                for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
                    unbindDrawables(((ViewGroup) view).getChildAt(i));
                }
                ((ViewGroup) view).removeAllViews();
            }
        }
于 2012-07-10T09:13:38.527 に答える
0

BitmapFactory.Optionsを使用する

BitmapFactory.Options opts = new BitmapFactory.Options();
opt.inSampleSize = 2;
//this will decrease bitmap size,
// but also affect quality of the image, 
//so just play with this value to spot the good one;
Bitmap b = BitmapFactory.decodeFile(fileName, opts);
于 2012-07-10T09:13:45.090 に答える