1

Android 4.0.2 から 4.1.2 にアップグレードした後、自分で作成したアプリが機能しなくなりました。

写真を撮影するときは、コールバック データからビットマップを作成する必要があります。ビットマップ コマンドの実行中に、メモリ不足エラーが発生します。

Google の問題で同様の問題を見つけました: http://code.google.com/p/android/issues/detail?id=42516

私はちょうどこの問題に遭遇し、いくつかの実験を行いました。私の結論は次のとおりです。

- XML でドローアブルまたは色を設定して setContentView で適用することはできません。そうすると、Activity がリークします。

修正: setContentView を使用しないで、代わりに LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); を使用してください。

inflater.inflate(R.layout.activity_frontpage, (ViewGroup) findViewById(android.R.id.content), true);

だから私は修正を試みましたが、それは私にとってはうまくいきません。画面が黒いままで、Camera Error -1 例外が発生します。

ここに私のコールバックがあります:

public class ScanCallback implements PictureCallback {

    MainActivity mainActivity;
    private boolean savePicture = false;

    public ScanCallback(MainActivity mainActivity) {
        this.mainActivity = mainActivity;
    }

    @Override
    public void onPictureTaken(byte[] data, Camera camera) {
        Bitmap bitmapPicture = BitmapFactory.decodeByteArray(data, 0,
                data.length);
        Bitmap redrawn = bitmapPicture.copy(bitmapPicture.getConfig(), true);

        mainActivity.mCamera.startPreview();

        MainActivity.waitForCallback = false;

    }
}

そして私のメインのActivity.onCreate:

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);

        mPreview = new CameraView(this);

        mainActivity = this;

        scanCallback = new ScanCallback();

        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

//      setContentView(mPreview);
        LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
        inflater.inflate(R.layout.activity_main,
//              (ViewGroup) findViewById(android.R.id.content), true);


        setProgressBarIndeterminateVisibility(false);
    }

それはそれについてです。他のコードを見たい場合は、お知らせください。

修正を実行する方法はありますか? または、そもそもエラーを回避する方法は?

4

1 に答える 1

1

Displaying Bitmaps EfficientlyおよびLoading Large Bitmaps Efficientlyを確認してください。

特に必要に応じて、ビットマップをダウンサンプリングして小さくするか、1 つの大きなビットマップからいくつかの小さなビットマップを作成して 1 つずつロードすることができます。そのため、メモリをあまり使用しません。

于 2013-03-19T17:43:49.353 に答える