2015-09-08 2 views
1

Я пишу простой код, чтобы сделать снимок, а затем отобразить его на экране с помощью ImageView. Однако есть утечка памяти, которую я не нахожу. (Память идет от 7 МБ до 39 МБ после съемки)Android-камера Утечка памяти растрового изображения

public class MainActivity extends Activity { 

    public String gl; 
    ImageView viewImage; 
    Button b; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     b = (Button) findViewById(R.id.myButton); 
     viewImage = (ImageView) findViewById(R.id.myImageView); 
    } 

    public void launchCamera(View view) {//Button onClick method 
     Intent i = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg"); 
     gl = f.getAbsolutePath(); 
     i.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f)); 
     startActivityForResult(i, 1); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == 1 && resultCode == RESULT_OK) { 
      Bitmap bitmap; 
      BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); 
      bitmap = BitmapFactory.decodeFile(gl, bitmapOptions); 
      viewImage.setImageBitmap(bitmap); 
     } 
    } 
} 

ответ

1

Вот ссылка:

https://stackoverflow.com/a/32245332/3702862

В которой я дал эффективный способ, чтобы сделать снимок из Camera, а затем отобразите его в ImageView.

Надеюсь, это вам поможет.

+0

Это прекрасно работает, спасибо! – osemec

1

Изображение может быть огромным в памяти, каждый пиксель занимает 32 бит в памяти.

Вы должны загрузить уменьшенную версию изображения, а не полный размер. Я даже удивляюсь, что вы не получили ошибку при загрузке изображения размером более 2048 * 2048 пикселей.

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