После обновления с Android 4.0.2 до 4.1.2 мое самоподготовленное приложение больше не работает.Недостаточно памяти после обновления Android на Galaxy S2
При съемке изображения он должен создать растровое изображение из данных обратного вызова. Во время команды bitmap я получаю сообщение об ошибке «Недостаточно памяти».
я нашел подобную проблему в вопросе Google: http://code.google.com/p/android/issues/detail?id=42516
Я просто столкнулся с этой проблемой и сделал некоторые эксперименты, мой вывод:
-вы не могут установить любую вытяжку или цвет в XML и применять его с setContentView, это приведет к утечке на активность
исправление: не используйте setContentView вместо этого использовать LayoutInflater инфлятор = LayoutInflater.from (getApplicatio nContext());
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);
}
Вот об этом. Если вы хотите увидеть какой-либо другой код, дайте мне знать.
Любые идеи, как заставить исправить работу? Или как избежать ошибки в первую очередь?
Вам нужно, чтобы все изображение было снято? Возможно, вы захотите уменьшить размер растровых изображений. –
Мне нужно 6 200x200 квадратов из фотографий, остальные могут быть уменьшены. – Josch
Посмотрите на эффективную обработку растровых изображений, либо путем понижающей дискретизации, либо разбивайте огромные битмапы на более мелкие и обрабатывайте их один за другим. –