大型TableView与缩略图崩溃应用程序在钛

时间:2015-03-04 00:24:16

标签: iphone titanium appcelerator titanium-alloy

我有一个带有自定义行的表视图(准确地说是77)。每个自定义行都有缩略图和标题。

通过以下方式从精灵加载缩略图:

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;
};

我注意到如果我没有设置缩略图,那么tableview上的性能会更高并且不会崩溃所以我知道它与缩略图有关。

tableview加载正常,当我开始快速滚动时,tableview开始滞后于我的iPad然后崩溃。

我注意到如果我滚动得足够慢以到达tableview的底部而不会崩溃然后快速滚动,那很好。这就像它们都被加载到内存中所以我可以无论如何滚动。

有关于此的任何想法吗?对我来说,似乎直到它们实际可见时才加载行,如果我滚动到快速,则加载的行太多而且内存耗尽而且崩溃

1 个答案:

答案 0 :(得分:1)

我认为问题在于您将图像设置为blob,并在每次渲染表时执行此操作。我建议只在第一次剪切精灵,将它们保存到设备,然后在渲染表时传递路径。

要全面大幅提升列表效果,请从TableView切换到较新的ListView

改进代码的一些注意事项:

  • 使用OS_ANDROID代替Ti.Platform.osname != 'android'
  • #slideRow[platform=ios] { selectionStyle: Ti.UI.iPhone.TableViewCellSelectionStyle.NONE }中使用widget.tss,而不是widget.js
  • 中的样式内联