带有缩略图的大型 TableView 在 Titanium 中崩溃应用程序
Large TableView with thumbnails crashing app in Titanium
我有一个包含自定义行(准确地说是 77)的 table 视图。每个自定义行都有一个缩略图和一个标题。
缩略图是通过以下方式从 sprite 加载的:
var row = Alloy.createWidget('com.dop.vforummobile.sliderow');
//-- thumbBlob is a jpg file that is 107x6160, maybe the large sprite is the problem?
var cropped = thumbBlob.imageAsCropped({
height:80,
width:107,
x:0,
y:i * 80
});
row.init(slides[i], i, cropped);
row.init(args) 低于
var init = function(data, index, cropped)
{
$.title.text = (index + 1) + '. ' + data.title;
$.slideRow.startTime = data.startTime;
$.slideRow.searchFilter = data.title + ' ' + data.slideText;
if (Ti.Platform.osname == 'android') $.slideRow.title = $.slideRow.searchFilter;
if (Ti.Platform.osname != 'android') $.slideRow.selectionStyle = Ti.UI.iPhone.TableViewCellSelectionStyle.NONE;
$.thumb.image = cropped;
};
我注意到如果我不设置缩略图,table视图的性能会好得多并且不会崩溃所以我知道这与缩略图有关。
table 视图加载正常,当我开始快速滚动时,table 视图开始滞后于我的 iPad 然后崩溃。
我注意到,如果我滚动得足够慢以到达 table 视图的底部而不会崩溃,然后快速滚动,那就没问题了。好像它们都已加载到内存中,所以我可以随时滚动。
对此有什么想法吗?对我来说,这些行似乎在它们真正可见之前不会加载,如果我快速滚动,加载的行太多,我 运行 内存不足,它崩溃了
我认为问题在于您将图像设置为 blob,并且在每次呈现 table 时都这样做。我建议只在第一次剪切精灵,将它们保存到设备,然后在渲染 table.
时传递路径
要从整体上大大提高列表性能,请从 TableView
切换到较新的 ListView
。
一些改进代码的注意事项:
- 使用
OS_ANDROID
代替Ti.Platform.osname != 'android'
- 在
widget.tss
中使用 #slideRow[platform=ios] { selectionStyle: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE }
而不是在 widget.js
中使用内联样式
我有一个包含自定义行(准确地说是 77)的 table 视图。每个自定义行都有一个缩略图和一个标题。
缩略图是通过以下方式从 sprite 加载的:
var row = Alloy.createWidget('com.dop.vforummobile.sliderow');
//-- thumbBlob is a jpg file that is 107x6160, maybe the large sprite is the problem?
var cropped = thumbBlob.imageAsCropped({
height:80,
width:107,
x:0,
y:i * 80
});
row.init(slides[i], i, cropped);
row.init(args) 低于
var init = function(data, index, cropped)
{
$.title.text = (index + 1) + '. ' + data.title;
$.slideRow.startTime = data.startTime;
$.slideRow.searchFilter = data.title + ' ' + data.slideText;
if (Ti.Platform.osname == 'android') $.slideRow.title = $.slideRow.searchFilter;
if (Ti.Platform.osname != 'android') $.slideRow.selectionStyle = Ti.UI.iPhone.TableViewCellSelectionStyle.NONE;
$.thumb.image = cropped;
};
我注意到如果我不设置缩略图,table视图的性能会好得多并且不会崩溃所以我知道这与缩略图有关。
table 视图加载正常,当我开始快速滚动时,table 视图开始滞后于我的 iPad 然后崩溃。
我注意到,如果我滚动得足够慢以到达 table 视图的底部而不会崩溃,然后快速滚动,那就没问题了。好像它们都已加载到内存中,所以我可以随时滚动。
对此有什么想法吗?对我来说,这些行似乎在它们真正可见之前不会加载,如果我快速滚动,加载的行太多,我 运行 内存不足,它崩溃了
我认为问题在于您将图像设置为 blob,并且在每次呈现 table 时都这样做。我建议只在第一次剪切精灵,将它们保存到设备,然后在渲染 table.
时传递路径要从整体上大大提高列表性能,请从 TableView
切换到较新的 ListView
。
一些改进代码的注意事项:
- 使用
OS_ANDROID
代替Ti.Platform.osname != 'android'
- 在
widget.tss
中使用#slideRow[platform=ios] { selectionStyle: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE }
而不是在widget.js
中使用内联样式