内存使用量在PhoneGap App中攀升

时间:2014-09-14 10:05:43

标签: javascript android jquery-mobile cordova memory-management

我有一个PhoneGap / JQuery MObile应用程序,它通过Ajax从服务器获取数据并将其显示为列表。随着每次Ajax获取,App占用的内存增加大约10 MB。对于第一次获取它可能没问题,因为它获取大量记录(大约700)。但是,对于后续调用,我的理解是它应该重用内存而不是每次堆积另外10 MB。我使用.off()来释放事件处理程序,以防它们占用内存但没有成功。

以下是显示输出的主页Div:

<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>

这是从服务器获取数据并在上面的div中显示的Javascript代码。

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;

有人可以告诉我如何释放内存并确保重用相同的内存而不是堆积越来越多的内存。

非常感谢。

=========更新===========

即使我删除了以下部分,我仍然可以看到内存使用率攀升:

$(document).ready(function () {
        $(".PL").click(function () {
            if ( !$(this).hasClass("BTitleRow") )
            {
                $(".PL").removeClass("RowHighlight");
                $(this).addClass("RowHighlight");
                OpenNewLink($(this).attr('name'));
            }
        });
    });

在Ajax和listview中似乎存在某种内存泄漏(&#34; refresh&#34;)。有谁可以帮助我吗。感谢

3 个答案:

答案 0 :(得分:2)

不是完整的答案,但如果您可以在Chrome中运行网络应用程序(因此在Phonegap之外),您可以使用Javascript探查器获取堆快照以确定内存的使用位置。

如果您必须在Phonegap内部运行,但拥有Android设备,则还可以将Chrome调试器连接到它,并且通过一些黑客攻击,还可以连接iOS设备和/或模拟器。

答案 1 :(得分:1)

内疚不是你的代码。这是jQuery喜欢吃内存我常常看到纯javascript和jQuery应用程序在内存中的比例为4。

要么你的移动开发中没有使用jQuery作为关键部分,要么你不再使用jQuery用于你的移动应用程序(这就是我正在做的事情),你要么使用http://plugins.jquery.com/cache/而要清理内存时。

BR

答案 2 :(得分:-2)

试试这个,当你的应用程序启动时,它会清除。我知道现在这就是你想要的,但它可能对你有帮助..

super.clearCache(); // just add This Line
super.loadUrl("file:///android_asset/www/index.html");