带有缩略图的大型 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
  • 中使用内联样式