Uso de la memoria que sube en la aplicación PhoneGap
Tengo una aplicación PhoneGap / JQuery MObile que busca datos del servidor a través de Ajax y lo muestra como una lista. Con cada búsqueda de Ajax la memoria ocupada por la aplicación aumenta en unos 10 MB. Para la primera búsqueda puede estar bien, ya que obtiene un gran número de registros (alrededor de 700). Sin embargo, para las llamadas siguientes mi entendimiento es que debe reutilizar la memoria en lugar de apilar otros 10 MB cada vez. He utilizado .off () para liberar los manejadores de eventos en caso de que estaban celebrando la memoria, pero no éxito.
Aquí está la página principal Div donde se muestra la salida:
- Obtenga memoria de proceso libre en android
- Límite de tamaño de Android montón, todavía tenemos necesidad de diseñar aplicaciones con un límite de 16 MB en mente?
- Supervisar la memoria ocupada por mi aplicación en Android
- Android - Cómo obtener el uso de memoria de mi dispositivo Android
- Fuera de la memoria
<div data-role="content" class="MainContent" style="overflow:hidden; padding-top: 0px;"> <ul data-divider-theme="b" data-role="listview" data-inset="true" class="MainMenu"> </ul>
Y este es el código Javascript que busca los datos del servidor y muestra en la div anterior.
AjaxFile = "mydomai.com/ajax.php"; $.get(AjaxFile, function (AjaxData) { $( ".PL" ).off(); $(".MainMenu").off(); $(".MainContent").off(); AjaxData = '<li class="MainMenuList" data-role=list-divider>' + gTitle + AjaxData; $(".MainMenu").empty(); $(".MainMenu").html(AjaxData); $(".MainMenu").listview('refresh'); window.scrollTo(0, 0); $.mobile.loading('hide'); HighlightRow(gCurrentFile); $(document).ready(function () { $(".PL").click(function () { if ( !$(this).hasClass("BTitleRow") ) { $(".PL").removeClass("RowHighlight"); $(this).addClass("RowHighlight"); OpenNewLink($(this).attr('name')); } }); }); }); AjaxData = null; return;
¿Puede alguien por favor decirme cómo puedo liberar la memoria y asegurar que la misma memoria se reutiliza en lugar de amontonar más y más memoria.
Muchas gracias.
========= UPDATE ===========
Incluso si elimino la parte inferior, todavía puedo ver el uso de memoria subiendo:
$(document).ready(function () { $(".PL").click(function () { if ( !$(this).hasClass("BTitleRow") ) { $(".PL").removeClass("RowHighlight"); $(this).addClass("RowHighlight"); OpenNewLink($(this).attr('name')); } }); });
Parece que hay algún tipo de pérdida de memoria en Ajax, así como listview ("refresh"). Puede alguien ayudarme por favor. Gracias
- Cómo borrar la memoria inactiva en Android mediante programación?
- Android SparseArray con la clave de cadena?
- Simulación de memoria en android
- DeadObjectException en la aplicación android
- ¿Cómo analizar el comportamiento de Dalvik GC?
- Android: ¿herramientas para encontrar fugas de memoria?
- Almacenamiento de datos de aplicaciones de Android en la tarjeta SD
- Tamaño de una aplicación Android de Hello World
No es una respuesta completa, pero si se puede ejecutar la aplicación web en Chrome (por lo que fuera de Phonegap) podría utilizar el perfil de Javascript para tomar una instantánea de Heap para averiguar dónde se utiliza la memoria.
Si tienes que ejecutar dentro de Phonegap pero tienes un dispositivo Android también es posible conectar el depurador de Chrome a él, y con un poco de hacking también es posible conectar dispositivos iOS o simuladores.
La culpa no es tu código. Es jQuery que les encanta comer memoria a menudo veo una proporción de 4 entre un javascript puro y una aplicación jQuery en consomption memoria.
O no usas jQuery para la parte crítica en tu desarrollo móvil, o no usas jQuery para tus aplicaciones móviles (eso es lo que estoy haciendo), o bien usas http://plugins.jquery.com/cache / Y limpiar la memoria de vez en cuando.
BR
Pruebe esto, se desactivará la captura cuando se inicia la aplicación. Sé que esto es lo que realmente quieres, pero puede ser que te ayude ..
super.clearCache(); // just add This Line super.loadUrl("file:///android_asset/www/index.html");
- Comportamiento extraño de una actividad en diferentes versiones de Android: el mapa parpadea
- ¿Cómo puedo implementar formas no rectangulares para los botones de android