Galaxy S2上的Android更新后内存不足

时间:2013-03-19 15:29:52

标签: android memory upgrade out-of-memory layout-inflater

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

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

我在Google问题中发现了类似的问题: http://code.google.com/p/android/issues/detail?id=42516

  

我刚刚遇到这个问题并做了一些实验,我的结论是:

     

- 您无法在XML中设置任何drawable或color并将其应用于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);
    }

就是这样。如果您想查看任何其他代码,请与我们联系。

有关如何运行修复程序的任何想法?或者如何首先避免错误?

1 个答案:

答案 0 :(得分:1)

您应该查看Displaying Bitmaps EfficientlyLoading Large Bitmaps Efficiently

根据您的特殊需要,您可以对位图进行缩减采样,使它们更小,或者从一个更大的位图创建几个较小的位图,然后逐个加载。所以你不要用那么多记忆。