2013-03-19 2 views
1

После обновления с 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); 
    } 

Вот об этом. Если вы хотите увидеть какой-либо другой код, дайте мне знать.

Любые идеи, как заставить исправить работу? Или как избежать ошибки в первую очередь?

+0

Вам нужно, чтобы все изображение было снято? Возможно, вы захотите уменьшить размер растровых изображений. –

+0

Мне нужно 6 200x200 квадратов из фотографий, остальные могут быть уменьшены. – Josch

+0

Посмотрите на эффективную обработку растровых изображений, либо путем понижающей дискретизации, либо разбивайте огромные битмапы на более мелкие и обрабатывайте их один за другим. –

ответ

1

Вы должны взглянуть на более Displaying Bitmaps Efficiently и Loading Large Bitmaps Efficiently

В зависимости от ваших особенно нуждается вы можете декодируете растровые изображения, так что они меньше или создать несколько небольших растровые изображения из одного больших и просто загрузить один за другим. Таким образом, вы не используете столько памяти.

Смежные вопросы