我已经阅读了很多关于如何控制Titanium移动应用程序在Android平台上的内存泄漏的网页。
我的情况是,我正在构建一个应用程序,使用多级列表(实际上是tableViews),用户可以通过它们进行导航。它使用一个窗口,在用户选择列表项时,会创建一个新视图,该视图从右向左动画显示。我选择了这个选项,因为在所有平台上都似乎不可能创建一个从右到左滑入的新窗口。
在每个视图中,都会创建一个事件侦听器来检查点击了哪个tableRow,然后创建相应的子菜单并将其动画显示在屏幕上。
我注意到,每次单击视图后,内存使用量都在稳步增长,但我似乎无法确定内存泄漏出现在哪里。
目前,我正在检查主窗口,以查看窗口是否已动画显示在视图之外(然后在320像素宽的设备上,.left属性为320)。然后,我会将此视图从窗口中删除,并将代理设置为null,使用以下方法:
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工具包提供的内存使用情况?是否有一种方法可以获取所有全局变量或事件监听器?
removeEventListener
。 - Josiah Hester