我已阅读了很多网页,讨论如何控制基于Titanium的Android移动应用程序中的内存泄漏。钛内存管理
我的情况是,我正在构建一个应用程序,使用多级列表(实际上这些是tableViews),用户可以在其中浏览。它使用一个窗口,当用户选择一个列表项目时,会创建一个从右向左动画的新视图。我选择了这个选项,因为似乎不可能创建一个从右向左滑入所有平台的新窗口。
在每一个视图中,都会创建一个eventListener来检查哪个tableRow被点击,然后创建相应的子菜单并在屏幕中生成动画。
我注意到,每次点击视图后内存使用量稳步增长,但我似乎无法查明内存泄漏的存在位置。
目前我正在检查主窗口,以查看该窗口是否在视图外动画(然后,320px宽度的设备上的.left属性为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工具包提供的内存使用情况?有没有获取所有全局变量或事件侦听器的方法?
您可以使用dalvik工具包来分析由钛生成的Android项目,请检查它的构建文件夹。还可以尝试使用'removeEventListener' – 2013-03-05 17:37:14