我已经阅读了很多讨论如何在基于 Titanium 的 Android 移动应用程序中控制内存泄漏的网页。
我的情况是我正在构建一个应用程序,该应用程序使用用户可以在其中导航的多个级别的列表(实际上这些是 tableViews)。它使用一个窗口,当用户选择一个列表项时,会创建一个从右到左动画的新视图。我选择了这个选项,因为似乎不可能创建一个从右到左滑入所有平台的新窗口。
在每个视图中,都会创建一个 eventListener 来检查单击了哪个 tableRow,然后创建相应的子菜单并将其动画到屏幕中。
我注意到每次单击视图后内存使用量都在稳步增长,但我似乎无法确定内存泄漏的位置。
目前我正在检查主窗口以查看窗口是否已被动画化(然后 .left 属性在 320px 宽的设备上为 320)。然后我从窗口中删除这个视图,并将代理设置为空,使用:
for ( i = 0; i < win.children.length; i++) {
if ( (win.children[i] != null) && (win.children[i].left == 320) ) {
win.remove(win.children[i]);
win.children[i] = null;
}
}
不过,它仍在增加内存使用量。这可能是因为每个新视图都包含一个表和一个事件侦听器,使用的函数包含:
var sub_table = Ti.UI.createTableView({top:'50dp',separatorColor: rowSeparatorColor});
sub_table.setData(data);
sub_table.addEventListener('click', function(e) {
create(e.rowData.data);
});
new_view.add(my_navbar);
new_view.add(sub_table);
return new_view;
我必须单独删除它们还是在视图被破坏时它们被破坏?我必须手动删除它们,我该怎么做?
在更一般的说明中,我不知道如何确定内存使用的原因。有没有办法在某个时间获取内存中的所有对象和/或变量?有没有办法深入了解 Dalvik 工具包提供的内存使用情况?有没有获取所有全局变量或事件监听器的方法?