内存警告/ PhoneGap iPad应用程序崩溃

Tra*_*tic 6 jquery memory-management ipad cordova

我已经尝试了几种方法来使用Phonegap创建一个单页本机应用程序,并且正在寻求关于故障排除的一些一般性建议.

第一种方法: 它基本上是一堆不同的页面和子页面,它们将jquery加载到生活在索引页面上的容器中.因此,没有页面加载,只是使用.load()将页面片段从页面加载到shell中.

第二种方法: 我制作了一个包含所有内容的单页html页面,然后基于将导航项的类与内容容器的id匹配来显示和隐藏该页面.

两种方法都可以机械地工作 问题似乎在于我的所有子页面都有一个图库或2-6个图像(所以我总共有超过215个图像,660 x 440),我已经使用了jquery循环,并且Touchwipe以手势激活滚动.画廊工作正常,但经过一些滚动浏览大约35个画廊后,应用程序总是收到内存警告级别1,然后是2,然后崩溃.我在仪器中的内存使用似乎没问题...... ajax加载的片段版本保持在2兆字节的活字节数,单页分页器一直保持在5兆字节左右.画廊由div中的CSS背景图像组成,因为它似乎比标签更好.

我没有看到任何内存泄漏,或者内存警告之外的任何其他问题.我有点坚持如何追踪这一点.我完全是试验和错误的死亡.已经将javascript减少到了最基本的要领.随着时间的推移,似乎正在形成一些东西.

关于如何弄清楚发生了什么的任何想法?是否有一些第一种方法可以确保javascript不会导致某种类型的内存泄漏?

令人非常沮丧的是,除了iPad之外,整个过程非常有效.

我的下一个策略可能是尝试在不使用时将画廊背景图像重写为空白的gif.

这是我用于单页面的代码:

$(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");
            } 
        });  
    });
});
Run Code Online (Sandbox Code Playgroud)

感谢您的任何建议,我正在拔头发.

jit*_*ter 1

乍一看我并没有发现任何问题。当您打开下一个库时,您可能会尝试显式销毁 jQuery Cycle 库,看看是否有帮助

$(youridentifier).cycle('destroy');
Run Code Online (Sandbox Code Playgroud)