Próbowałem już różnych metod, aby utworzyć natywną aplikację natywną za pomocą Phonegapa i uzyskać ogólne porady dotyczące rozwiązywania problemów.Ostrzeżenia dotyczące pamięci/upaść za pomocą aplikacji PhoneGap na iPad
Pierwsze podejście: Jest to w zasadzie kilka różnych stron i podstron ładowane z jQuery do pojemników, które żyją na stronie indeksu. Tak więc żadna strona nie ładuje się, tylko ładuje fragmenty stron ze stron do powłoki, używając .load().
Drugie podejście: Zrobiłem jedną stronę html strony z całą zawartością, a następnie pokazać i ukryć, że na podstawie dopasowania klasę elementu nawigacyjnego do id zawartości pojemnika.
Oba podejścia działają dobrze mechanicznie. Problem polega na tym, że wszystkie moje podstrony mają galerię lub 2-6 zdjęć (mam łącznie ponad 215 zdjęć, 660 x 440), dla których użyłem cyklu jquery, i Touchwipe, aby aktywować przewijanie za pomocą gestów. Galerie działają dobrze, ale po przewinięciu około 35 galerii aplikacja zawsze otrzymuje komunikat ostrzegawczy o poziomie 1, a następnie 2, a następnie zawiesza się. Moje użycie pamięci w instrumentach wydaje się ok ... wersja z ładowanym fragmentem ajax pozostaje około 2 megabajtów na żywo, jeden pager utrzymuje się na poziomie około 5 megapikseli. Galerie składają się z obrazów tła CSS w elementach div, ponieważ wydawało się, że działają lepiej niż znaczniki.
Nie widzę żadnych wycieków pamięci ani żadnych innych problemów poza ostrzeżeniami dotyczącymi pamięci. Trochę utknąłem na tym, jak to wyśledzić. Zrobiłem próbę i błąd całkowicie na śmierć. Zredukowaliśmy javascript do podstawowych rzeczy. Coś zdaje się narastać w miarę upływu czasu.
Wszelkie pomysły, jak dowiedzieć się, co się dzieje? Czy są jakieś pierwsze podejścia, aby upewnić się, że nic się nie dzieje z javascriptem, który powoduje jakiś wyciek pamięci?
To bardzo frustrujące, że całość działa całkiem dobrze, z wyjątkiem iPada.
Moja następna taktyka może polegać na przepisywaniu obrazów tła galerii na pusty GIF, gdy nie są używane.
Oto kod używam dla jednej 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");
}
});
});
});
Dzięki za wszelkie rady, jestem ciągnięcie moich włosów.
Dzięki za spojrzenie, też tego próbowałem. Najpierw dodałem klasę do bieżącej galerii, coś w rodzaju ".active_gallery", następnie specjalnie zniszczę tę konkretną galerię "cyklu" pierwszą rzeczą w zdarzeniu kliknięcia nawigacji, a następnie usuń klasę przed przejściem przez cały kod, który konfiguruje nowa galeria bieżącego cyklu. Jeszcze nie miał szczęścia. Wydaje się, że nie ważne co, po przejściu przez 35 galerii, zaczyna otrzymywać ostrzeżenia o pamięci. Dzięki aplikacji ładującej ajax uzyskuję ten sam wynik, nawet po zniszczeniu galerii cyklu, usunięciu programów do usuwania "wytrzeć" itp. – Transoptic