¿Por qué mi aplicación utiliza toda la memoria y obtiene OutOfMemoryError: Error al asignar?

¿Por qué esto happeing todo el tiempo? No tengo ni un mapa de bits para reciclar y no sé por qué mi aplicación de error de memoria de lanzamiento.

I seleccionar la imagen de la galería aquí es el código para obtener una imagen de la galería a continuación, mostrarlo en algunos imageView.

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { ImageView b = (ImageView) findViewById(R.id.viewImage); super.onActivityResult(requestCode, resultCode, data); if (resultCode == RESULT_OK) { if (requestCode == 1) { File f = new File(Environment.getExternalStorageDirectory().toString()); for (File temp : f.listFiles()) { if (temp.getName().equals("temp.jpg")) { f = temp; break; } } try { Bitmap bitmap; BitmapFactory.Options bitmapOptions = new BitmapFactory.Options(); bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(), bitmapOptions); b.setImageBitmap(bitmap); String path = android.os.Environment .getExternalStorageDirectory() + File.separator + "Phoenix" + File.separator + "default"; f.delete(); OutputStream outFile = null; File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg"); try { outFile = new FileOutputStream(file); bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile); outFile.flush(); outFile.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } else if (requestCode == 2) { Uri selectedImage = data.getData(); String[] filePath = { MediaStore.Images.Media.DATA }; Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null); c.moveToFirst(); int columnIndex = c.getColumnIndex(filePath[0]); String picturePath = c.getString(columnIndex); c.close(); Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath)); Log.w("path of image from gallery......******************.........", picturePath+""); b.setImageBitmap(thumbnail); b.setTag(picturePath); } } } 

Después de eso hay 3 imagebuttons debajo de la imagen del usuario (que escogió de la galería). Cuando la prensa del usuario en cada uno de ellos conseguirá el nombre de ese imageView drawable y enviará a otra actividad entonces quiero watermark la imagen del usuario en ese Imagebutton y la demostración en una imagenView

 private static HashMap<Integer,String> activityMap = new HashMap<Integer,String>(); static { activityMap.put( R.id.agahi1,"agahi1"); activityMap.put( R.id.agahi2,"agahi2"); } // use this in the layout xml file for all the buttons onClick attribute public void Clicked( View vw ) { String a = String.valueOf(activityMap.get(vw.getId())); Intent i = new Intent(this,fotCreator.class); ImageView b = (ImageView) findViewById(R.id.viewImage); String c = (String) b.getTag(); i.putExtra("image",c); i.putExtra("frame",a); startActivity(i); } 

Este es el código para la actividad watermarker

  package net.svncorp.shadikade; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.ActionBarActivity; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.ProgressBar; public class fotCreator extends ActionBarActivity { private AsyncCaller myasync; private ProgressBar bar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fot_creator); //progress bar bar = (ProgressBar) this.findViewById(R.id.progressBar); MainActivity.checkversion(this); } @Override public void onBackPressed() { super.onBackPressed(); this.finish(); } @Override protected void onResume() { super.onResume(); myasync = new AsyncCaller(); myasync.execute(); } private class AsyncCaller extends AsyncTask<Void, Void, Drawable> { @Override protected void onPreExecute() { super.onPreExecute(); bar.setVisibility(View.VISIBLE); } @Override protected Drawable doInBackground(Void... params) { try { // simulate here the slow activity Intent intent = getIntent(); final String frame = intent.getStringExtra("frame"); String image = intent.getStringExtra("image"); Resources resources = getResources(); int id = resources.getIdentifier(frame, "drawable", getPackageName()); Drawable d = resources.getDrawable(id); return d; } catch (Exception e1) { e1.printStackTrace(); } return null; } @Override protected void onPostExecute(Drawable result) { super.onPostExecute(result); //this method will be running on UI thread ImageView finalimage = (ImageView)findViewById(R.id.finalimage); if (isCancelled() || result == null) { return; } finalimage.setImageDrawable(result); bar.setVisibility(View.GONE); } } @Override protected void onPause() { super.onPause(); myasync.cancel(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_fot_creator, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } 

Ahora este código funciona tan rápido por 2 o 3 veces de presionar imagebuttons e ir a watermarker activty pero su seguir recibiendo más lento y más lento ya veces se congela en el emulador y veo estos en logcat

  11-24 15:01:45.960 7751-7769/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 2419(163KB) AllocSpace objects, 1(1047KB) LOS objects, 12% free, 13MB/15MB, paused 0 total 30ms 11-24 15:01:48.760 7751-7768/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB 11-24 15:01:48.760 7751-7768/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB 11-24 15:01:48.760 7751-7768/net.svncorp.shadikade I/art﹕ Forcing collection of SoftReferences for 1047KB allocation 11-24 15:01:48.790 7751-7768/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 1303(86KB) AllocSpace objects, 1(993KB) LOS objects, 12% free, 13MB/15MB, paused 0 total 30ms 11-24 15:01:53.700 7751-7751/net.svncorp.shadikade I/Choreographer﹕ Skipped 1272 frames! The application may be doing too much work on its main thread. 11-24 15:01:55.350 7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB 11-24 15:01:55.350 7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB 11-24 15:01:55.350 7751-7769/net.svncorp.shadikade I/art﹕ Forcing collection of SoftReferences for 993KB allocation 11-24 15:01:55.380 7751-7769/net.svncorp.shadikade I/art﹕ Clamp target GC heap from 17MB to 16MB 11-24 15:01:55.380 7751-7769/net.svncorp.shadikade I/art﹕ Alloc concurrent mark sweep GC freed 218(9KB) AllocSpace objects, 0(0B) LOS objects, 5% free, 15MB/16MB, paused 0 total 30ms 11-24 15:01:55.380 7751-7769/net.svncorp.shadikade E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 1017612 byte allocation with 954752 free bytes and 932KB until OOM" 11-24 15:01:55.380 7751-7769/net.svncorp.shadikade D/skia﹕ --- decoder->decode returned false 11-24 15:01:55.380 7751-7769/net.svncorp.shadikade E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #2 Process: net.svncorp.shadikade, PID: 7751 java.lang.RuntimeException: An error occured while executing doInBackground() at android.os.AsyncTask$3.done(AsyncTask.java:300) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355) at java.util.concurrent.FutureTask.setException(FutureTask.java:222) at java.util.concurrent.FutureTask.run(FutureTask.java:242) at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) Caused by: java.lang.OutOfMemoryError: Failed to allocate a 1017612 byte allocation with 954752 free bytes and 932KB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:444) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:973) at android.content.res.Resources.loadDrawableForCookie(Resources.java:2423) at android.content.res.Resources.loadDrawable(Resources.java:2330) at android.content.res.Resources.getDrawable(Resources.java:758) at android.content.res.Resources.getDrawable(Resources.java:724) at net.svncorp.shadikade.fotCreator$AsyncCaller.doInBackground(fotCreator.java:65) at net.svncorp.shadikade.fotCreator$AsyncCaller.doInBackground(fotCreator.java:45) at android.os.AsyncTask$2.call(AsyncTask.java:288) at java.util.concurrent.FutureTask.run(FutureTask.java:237)            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)            at java.lang.Thread.run(Thread.java:818) 

Creo que este es el problema de muchos otros como yo … Cualquier ayuda será apreciada.

3 Solutions collect form web for “¿Por qué mi aplicación utiliza toda la memoria y obtiene OutOfMemoryError: Error al asignar?”

Tal vez la adición de esta línea en Manifest en las etiquetas de aplicación le ayudará;

 <application ... ... android:largeHeap="true" > ...... ...... </application> 

Tenía un problema similar en Android 5. Mueva sus imágenes a / drawable-nodpi en lugar de / drawable

Si su emulador está usando para la prueba Intente fijar el RAM del dispositivo virtual a 2gb o tan. Tuve el mismo problema en el dispositivo virtual, pero el programa Ejecutar sin problemas en mi dispositivo físico Android

  • Diferencia real entre AsyncTask y Thread
  • Cancelar la descarga de archivos con httpclient y asynctask
  • ¿AsyncTask sigue esperando?
  • Android google maps async tarea agregar marcadores
  • Cómo llamar a un asynctask dentro de un evento de clic de botón
  • Cómo utilizar AsyncTask
  • Java.lang.ClassNotFoundException: android.os.AsyncTask causado por AdMob / Servicios de Google Play?
  • Múltiples parámetros de entrada para el método execute () de AsyncTask
  • Hilos y uso de tareas Asynctask para httppost
  • Asynctask ArrayList objeto que no pasa de doInBackground a onPostExecute
  • Actualización de una actividad desde un AsyncTask
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.