1

从 Android 4.0.2 升级到 4.1.2 后,我自己创建的应用程序不再工作了。

拍摄图片时,它应该根据回调数据创建位图。在位图命令期间,我收到内存不足错误。

我在谷歌问题中发现了类似的问题: 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);

所以我尝试了修复,但它对我不起作用。屏幕保持黑色,我收到相机错误 -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 and Loading Large Bitmaps Efficiently

根据您的特殊需要,您可以对位图进行下采样,使其更小,或者从一个较大的位图创建几个较小的位图,然后一张一张地加载。所以你不会使用那么多内存。

于 2013-03-19T17:43:49.353 回答