Ich habe mehrere Ansätze ausprobiert, um eine einseitige native App mit Phonegap zu erstellen, und suche nach allgemeinen Hinweisen zur Fehlerbehebung.Speicherwarnungen/Absturz mit PhoneGap iPad App
Erster Ansatz: Es ist im Grunde eine Reihe von verschiedenen Seiten und Unterseiten mit Jquery in Container verladen, die auf der Indexseite leben. Es wird also keine Seite geladen, sondern nur Seitenfragmente von Seiten in eine Shell geladen, wobei .load() verwendet wird.
Zweiter Ansatz: Ich machte eine Ein-Seiten-HTML-Seite mit allen Inhalten, dann zeigen, und dass auf Anpassung die Klasse eines Navigationspunktes zu einem id eines Content-Container basierend verstecken.
Beide Ansätze funktionieren gut mechanisch. Das Problem scheint in der Tatsache zu liegen, dass alle meine Unterseiten eine Galerie oder 2-6 Bilder haben (also insgesamt über 215 Bilder, 660 x 440), für die ich jquery cycle verwendet habe, und Touchwipe zum Aktivieren des Scrollens mit Gesten. Die Galerien funktionieren gut, aber nach einigem Scrollen durch etwa 35 Galerien erhält die App immer eine Erinnerungswarnstufe 1, dann 2, dann stürzt sie ab. Meine Speicherbelegung in Instrumenten scheint in Ordnung zu sein ... die Ajax-geladene Fragment-Version bleibt etwa 2 Megabyte Live-Bytes, der Ein-Pager bleibt konstant bei etwa 5 Megabyte. Die Galerien bestehen aus CSS-Hintergrundbildern in Divs, da diese besser als Tags zu funktionieren schienen.
Ich sehe keine Speicherlecks oder wirklich irgendwelche anderen Probleme außerhalb der Speicherwarnungen. Ich merke, wie ich das aufspüren kann. Ich habe Versuch und Irrtum absolut zu Tode gemacht. Habe das Javascript auf das Wesentliche reduziert. Etwas scheint sich im Laufe der Zeit zu entwickeln.
Haben Sie Ideen, wie Sie herausfinden können, was vor sich geht? Gibt es einige erste Ansätze, um sicherzustellen, dass nichts mit dem Javascript passiert, das eine Art von Speicherleck verursacht?
Es ist sehr frustrierend, dass die ganze Sache ziemlich gut funktioniert, außer auf dem iPad.
Meine nächste Taktik könnte sein, zu versuchen, die Galerie Hintergrundbilder zu einem leeren GIF neu zu schreiben, wenn sie nicht verwendet werden.
Hier ist der Code, den ich für die Ein-Pager:
$(document).ready(function(){
document.addEventListener('touchmove', function(e){ e.preventDefault(); });
$('div#mainpages > div').hide();
$("ul#mainnav li").click(function() {
$("#mainpages > div").hide();
var navClass = $(this).attr('class');
var target='#'+navClass;
$(target).show();
$('[id^=subpages] > div').hide();
$(target).find('[id^=subpages_] div:first').show();
});
$('[id^=subnav] li').click(function() {
$('[id^=subnav_] li').removeClass('current');
$('[id^=subpages_] > div').hide();
var subnavClass = $(this).attr('class');
var subtargeted='#'+subnavClass;
$(subtargeted).show();
$(this).addClass('current');
$(subtargeted+' .gallery_div_shell').cycle({
timeout: 0,
speed: 700,
speedIn: 300,
speedOut: 300,
fx: 'scrollHorz'
});
$(subtargeted+' .gallery_div_shell').touchwipe({
wipeLeft: function() {
$('.gallery_div_shell').cycle("next");
},
wipeRight: function() {
$('.gallery_div_shell').cycle("prev");
}
});
});
});
Vielen Dank für jede Beratung, ich meine Haare herausziehen.
Danke für einen Blick, ich habe das auch versucht. Ich habe der aktuellen Galerie zuerst eine Klasse hinzugefügt, etwa ".active_gallery", dann zerstöre diese spezielle "cycle" -Galerie als erstes beim click -Ereignis der Navigation und entferne dann die Klasse, bevor ich den ganzen Code durchführe, der die neue aktuelle Fahrradgalerie. Hatte noch kein Glück damit. Es scheint egal, was passiert, nachdem es durch 35 Galerien gerutscht ist, fängt es an Erinnerungen zu erhalten. Mit der Ajax Loading App, bekomme ich das gleiche Ergebnis, auch nach dem Zerstören der Fahrrad-Galerien, Entfernen der "Wipe" Handler, etc. – Transoptic