Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
Message from discussion Problemas de memoria con imagenes
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
juande  
View profile   Translate to Translated (View Original)
 More options Oct 31 2012, 12:25 pm
From: juande <jua...@gmail.com>
Date: Wed, 31 Oct 2012 09:25:52 -0700 (PDT)
Local: Wed, Oct 31 2012 12:25 pm
Subject: Re: Problemas de memoria con imagenes

Es que lo que estás haciendo es una barbaridad!!!!!!  !! ! !! !!! ! !  !! !
!! O_O!

El mensaje de error te dice que NO hay memoria para cargar en el "heap"
algo que ocupa casi 32 Megabytes. Algo normal, ya que la mayoría de
teléfonos Android tienen un "heap" de 16 Megabytes, así que tu aplicación
fallará en todos estos teléfono. Toda esta información sobre Bitmaps y los
problemas de memoria la puedes encontrar aquí:
http://developer.android.com/training/displaying-bitmaps/index.html

¿No has pensado en guardar la foto "tal cual" en la tarjeta SD, o en una
base de datos SQLite?

On Tuesday, October 30, 2012 4:50:37 PM UTC+1, neon2004 wrote:

> Hola.

> Tengo una imagen que creo a partir de una url almacenada en una bd. Con
> este bitmap que creo lo paso a base64 para guardar el string en las
> preferencias y poder recoger esta preferencia en otra activity donde quiero
> mostrar la imagen. El problema es que me peta ya que me da problemas de
> memoria.
> ¿Cómo puedo solucionarlo?

> El código que uso es el siguiente:

> Activity Principal: (Convierto el bitmap y lo guardo en las preferencias)

> URL url = new URL(urlAvatarl);
> bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());

>  ByteArrayOutputStream baos = new ByteArrayOutputStream();
>  bmp.compress(Bitmap.CompressFormat.JPEG, 20, baos);  
> byte[] b = baos.toByteArray();

> encodedImage = Base64.encodeToString(b, Base64.DEFAULT);

> SharedPreferences prefs =
> getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);
> editor.putString(TAG_URLAVATAR, encodedImage);
> editor.commit();

> **** HASTA AQUI TODO CORRECTO *****

> Activity Secundaria: (Recoge de las preferencias el bitmap almacenado como
> base64, lo paso a bitmap y lo muestro)

>  SharedPreferences prefs =  
> getSharedPreferences("MisPreferencias",Context.MODE_PRIVATE);

> urlAvatar = prefs.getString(TAG_URLAVATAR, "");

>  if( !urlAvatar.equalsIgnoreCase("") ){
>      byte[] b = Base64.decode(urlAvatar, Base64.DEFAULT);
>      bmp = BitmapFactory.decodeByteArray(b, 0, b.length);  
> ////////////***************************************************************  
> EN ESTE PUNTO ES DONDE PETA **************////
>       btnPerfil.setImageBitmap(bmp);
> }

> La traza que me da es esta:

> 10-30 16:22:14.859: E/dalvikvm-heap(21347): Out of memory on a
> 31961104-byte allocation.
> 10-30 16:22:14.859: I/dalvikvm(21347): "AsyncTask #2" prio=5 tid=14
> RUNNABLE
> 10-30 16:22:14.859: I/dalvikvm(21347):   | group="main" sCount=0 dsCount=0
> obj=0x4310b650 self=0x5d2125d8
> 10-30 16:22:14.859: I/dalvikvm(21347):   | sysTid=22837 nice=10 sched=0/0
> cgrp=apps/bg_non_interactive handle=1563176096
> 10-30 16:22:14.859: I/dalvikvm(21347):   | schedstat=( 133824784 45184177
> 199 ) utm=9 stm=3 core=0
> 10-30 16:22:14.859: I/dalvikvm(21347):   at
> android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
> 10-30 16:22:14.864: I/dalvikvm(21347):   at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:650)
> 10-30 16:22:14.864: I/dalvikvm(21347):   at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:722)
> 10-30 16:22:14.869: I/dalvikvm(21347):   at
> com.famovie.Login$ComprobarInternet$Logearse.doInBackground(Login.java:287)
> 10-30 16:22:14.869: I/dalvikvm(21347):   at
> com.famovie.Login$ComprobarInternet$Logearse.doInBackground(Login.java:1)
> 10-30 16:22:14.879: I/dalvikvm(21347):   at
> android.os.AsyncTask$2.call(AsyncTask.java:287)
> 10-30 16:22:14.969: I/dalvikvm(21347):   at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
> 10-30 16:22:14.969: I/dalvikvm(21347):   at
> java.util.concurrent.FutureTask.run(FutureTask.java:137)
> 10-30 16:22:14.969: I/dalvikvm(21347):   at
> android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
> 10-30 16:22:14.974: I/dalvikvm(21347):   at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1 076)
> 10-30 16:22:14.974: I/dalvikvm(21347):   at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 569)
> 10-30 16:22:14.974: I/dalvikvm(21347):   at
> java.lang.Thread.run(Thread.java:856)
> 10-30 16:22:14.974: D/AbsListView(21347):
> [unregisterDoubleTapMotionListener]
> 10-30 16:22:14.974: D/skia(21347): --- decoder->decode returned false
> 10-30 16:22:14.979: I/MotionRecognitionManager(21347):  
> .unregisterListener : / listener count = 0->0,
> listener=android.widget.AbsListView$4@42c92868
> 10-30 16:22:14.989: W/dalvikvm(21347): threadid=14: thread exiting with
> uncaught exception (group=0x41fc92a0)
> 10-30 16:22:14.999: E/AndroidRuntime(21347): FATAL EXCEPTION: AsyncTask #2
> 10-30 16:22:14.999: E/AndroidRuntime(21347): java.lang.RuntimeException:
> An error occured while executing doInBackground()
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.os.AsyncTask$3.done(AsyncTask.java:299)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.FutureTask.setException(FutureTask.java:124)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.FutureTask.run(FutureTask.java:137)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1 076)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 569)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.lang.Thread.run(Thread.java:856)
> 10-30 16:22:14.999: E/AndroidRuntime(21347): Caused by:
> java.lang.OutOfMemoryError
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:650)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:722)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> com.famovie.Login$ComprobarInternet$Logearse.doInBackground(Login.java:287)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> com.famovie.Login$ComprobarInternet$Logearse.doInBackground(Login.java:1)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> android.os.AsyncTask$2.call(AsyncTask.java:287)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     at
> java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
> 10-30 16:22:14.999: E/AndroidRuntime(21347):     ... 5 more
> 10-30 16:22:25.724: E/WindowManager(21347): Activity com.famovie.Login has
> leaked window
> com.android.internal.policy.impl.PhoneWindow$DecorView@42faaab0 that was
> originally added here
> 10-30 16:22:25.724: E/WindowManager(21347): android.view.WindowLeaked:
> Activity com.famovie.Login has leaked window
> com.android.internal.policy.impl.PhoneWindow$DecorView@42faaab0 that was
> originally added here
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.view.ViewRootImpl.<init>(ViewRootImpl.java:402)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.view.WindowManagerImpl.addView(WindowManagerImpl.java:311)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl. java:149)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.view.Window$LocalWindowManager.addView(Window.java:558)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.app.Dialog.show(Dialog.java:277)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> com.famovie.Login$ComprobarInternet$Logearse.onPreExecute(Login.java:255)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.AsyncTask.execute(AsyncTask.java:534)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> com.famovie.Login$ComprobarInternet.onPostExecute(Login.java:229)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> com.famovie.Login$ComprobarInternet.onPostExecute(Login.java:1)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.AsyncTask.finish(AsyncTask.java:631)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.AsyncTask.access$600(AsyncTask.java:177)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.Handler.dispatchMessage(Handler.java:99)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.os.Looper.loop(Looper.java:137)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> android.app.ActivityThread.main(ActivityThread.java:4898)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> java.lang.reflect.Method.invokeNative(Native Method)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> java.lang.reflect.Method.invoke(Method.java:511)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java: 1006)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
> 10-30 16:22:25.724: E/WindowManager(21347):     at
> dalvik.system.NativeStart.main(Native Method)

> Esta imagen es subida por un usuario al hacer el registro.

> La primera ve que se logea me peta tal como indico, pero el proceso de
> logueado se ha realizado, aunque no ha mostrado la siguiente activity, y lo
> almaceno para que la siguiente vez que entre, si se ha logeado
> anteriormente no tenga que volver  hacerlo. Pues esta segunda vez que ya
> esta almacenada el bitmap en las preferencias y no conecta con el
> webservice para recoger los datos, si que me carga bien la activity con la
> imagen.

> Este mismo problema de memoria me ocurre a veces cuando el usuario hace el
> registro.

> En este momento le doy la opción de elegir una foto de la galería y hay
> veces que me peta mostrando este error de OutOfMemoryError. El caso es que
> me pasa con imagenes que unas veces selecciona y peta y otras las
> seleccionas y muestro en un ImageButton sin problema alguno.

> Por último tengo una duda con respecto a las imágenes y es que algunas de
> ellas, hasta ahora solo me ocurre con una ya que tampoco he probado con
> muchas imágenes diferentes,
> resulta que me sale girada y no entiendo porque.

> Espero que podáis ayudarme.

> Gracias


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.