从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);
}
就是这样。如果您想查看任何其他代码,请与我们联系。
有关如何运行修复程序的任何想法?或者如何首先避免错误?
答案 0 :(得分:1)
您应该查看Displaying Bitmaps Efficiently和Loading Large Bitmaps Efficiently
根据您的特殊需要,您可以对位图进行缩减采样,使它们更小,或者从一个更大的位图创建几个较小的位图,然后逐个加载。所以你不要用那么多记忆。