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);
}
それはそれについてです。他のコードを見たい場合は、お知らせください。
修正を実行する方法はありますか? または、そもそもエラーを回避する方法は?