Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android


 
Herramientas
  #1  
Viejo 17/11/14, 16:06:10
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Out of memory

Buenas tardes,

Tengo un problema en mi app y estoy intentando recoger de mi bd mysql unos registros haciendo una llamada asynctask a un php que tengo y devolviendo estos registros en un JSON, el problema es que si sobrepaso los 2900 registros, la app se me queda sin memoria y me presenta el siguiente error en el Log de eclipse "out of memory", quisiera saber si hay alguna forma de solucionarlo de otra forma o algún método de liberación de memoria.

Un saludo!!
Responder Con Cita


  #2  
Viejo 17/11/14, 19:24:36
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
La máquina Dalvik sólo es capaz de administrar de 30 a 50 MB (dependiendo del móvil) a la vez en una única aplicación. Si luego por cada registro vas creando un objeto, si es posible que se te pete la memoria por eso.

¿La solución? Pues depende de como uses esos registros, si es para mostrarlos en un RecyclerView (antiguos ListView) puedes hacer la petición al PHP por páginas.
Responder Con Cita
  #3  
Viejo 17/11/14, 20:48:40
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
¿A que te refieres con hacer la petición por páginas?
Responder Con Cita
  #4  
Viejo 17/11/14, 21:28:14
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Pasarle un parámetro al PHP que te indique que página quieres traerte, y cada petición al PHP te trae una página.

Por ejemplo:

consulta.php?pagina=1
consulta.php?pagina=2

Y luego en el MySQL traer por ejemplo de 25 en 25, usando LIMIT al final de la consulta, de tal forma que:

página 1: LIMIT 0,25
página 2: LIMIT 25,25
página 3: LIMIT 50,25
etc...
Responder Con Cita
  #5  
Viejo 18/11/14, 09:38:55
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Entiendo , es que por lo de páginas pensé que te referías en views, probaré a ver que tal, muchas gracias!!
Responder Con Cita
  #6  
Viejo 20/11/14, 13:25:18
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Perdonad pero a lo mejor no me he explicado bien, mi caso es que tengo un solo php en el cual hace una consulta a mi base de datos mySQL para recoger los datos de esa consulta.
Desde la app hago la llamada a ese php pasandole la consulta que ha de realizar, esta me devuelve los datos, los recojo en un JSON y los inserto en la base de datos de mi app SQLite.
El problema es que todo va fenomenal pero cuando los registros a devolver exceden de 2900, salta el error Out of memory. Dice que el hilo principal está haciendo mucho trabajo... he probado a limpiar los objetos segun los termino de usar igualandolos a null y luego llamando al metodo System.gc() para que los limpie pero no hay manera :S
Responder Con Cita
  #7  
Viejo 20/11/14, 16:27:29
Avatar de Dexafree
Dexafree Dexafree no está en línea
Mr. FAQMan
Mensajes: 8,021
Compra y venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Versión de ROM: Android 4.1.1 Jelly Bean
Versión de Radio: KF1
Tu operador: Movistar
Mencionado: 65 comentarios
Tagged: 2 hilos
Cita:
Originalmente Escrito por pozako Ver Mensaje
Dice que el hilo principal está haciendo mucho trabajo... he probado a limpiar los objetos segun los termino de usar igualandolos a null y luego llamando al metodo System.gc() para que los limpie pero no hay manera :S


Esa parte la haces dentro del AsyncTask? En el doInBackground() ?

Si la haces en el onPostExecute se ejecuta en el hilo principal, con lo cual si que te puede petar.

También, aparte de limitar la consulta en tu script PHP tal y como te dice Kriogen, puedes probar a dividir los registros en, digamos, paquetes de 1000, e irlos insertando progresivamente
Responder Con Cita
  #8  
Viejo 21/11/14, 11:55:09
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Mirad este es el código:
productos = new AsyncHttpClient();
productos.setTimeout(3600000);
RequestParams parametros = new RequestParams();
parametros.put("consulta", "SELECT * FROM tabla");
productos.post(CONSULTAINSTALL, parametros, new JsonHttpResponseHandler() {
@Override
public void onSuccess(JSONArray jsonArray) {

new CopyTable_productos().executeOnExecutor(executorSe rvice,jsonArray);

}
});
El fallo segun el depurador de eclipse lo encuentro en la linea
productos.post(CONSULTAINSTALL, parametros, new JsonHttpResponseHandler()
Responder Con Cita
  #9  
Viejo 21/11/14, 14:16:15
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Tiene que construir un JSONArray de 2900 elementos, cada uno de ellos siendo un JSONObject y posiblemente con más JSONArray y JSONObject dentro de cada uno. Es posible que te pete por memoria.

Última edición por kriogeN Día 21/11/14 a las 14:18:20
Responder Con Cita
  #10  
Viejo 24/11/14, 12:28:01
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
¿Y veis alguna forma de recogerlo sin que petara la memoria?
Responder Con Cita
  #11  
Viejo 24/11/14, 12:32:14
Avatar de kriogeN
kriogeN kriogeN no está en línea
Colaborador/a
Mensajes: 4,637
Compra y venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Versión de ROM: CM13 - CM 11
Tu operador: Vodafone
Mencionado: 60 comentarios
Tagged: 3 hilos
Ya te lo he dicho antes, paginando.

O puedes recoger el String del JSon y parsearlo tu mismo poco a poco, pero me sigue pareciendo mejor paginar.
Responder Con Cita
  #12  
Viejo 27/11/14, 10:32:20
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Buenos Días!

Siento comunicar que probé por paginado, y sigue dando el error de "out of memory", así que la única forma que me queda probar es recogiendo el String JSON y parseandolo.
El problema es...¿Como puedo recoger ese String?
Responder Con Cita
  #13  
Viejo 01/12/14, 11:45:21
Avatar de pozako
pozako pozako no está en línea
Usuario poco activo
Mensajes: 48
 
Fecha de registro: sep 2011
Mensajes: 48
Tu operador: Movistar
Mencionado: 0 comentarios
Tagged: 0 hilos
Finalmente lo he solucionado leyendo un fichero sql y ejecutando linea a linea la sentencias SQL y me va perfecto, muchas gracias por su tiempo!!
Responder Con Cita
Respuesta

Estás aquí
Regresar   HTCMania > Todo sobre Android > Programación y Desarrollo para Android

Herramientas

Reglas de Mensajes
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Las caritas están On
Código [IMG] está On
Código HTML está Off

Saltar a Foro



Hora actual: 11:47:17 (GMT +1)

Cookies settings
Powered by vBulletin™
Copyright © vBulletin Solutions, Inc. All rights reserved.
 
HTCMania: líderes desde el 2007