[Flex mobile]关于放置一个自定义组件的多个实例
Posted
技术标签:
【中文标题】[Flex mobile]关于放置一个自定义组件的多个实例【英文标题】:[Flex mobile]About placing many instances of a custom component 【发布时间】:2013-11-29 02:41:47 【问题描述】:目前,我的应用程序开发处于优化阶段。添加我的一个组件时遇到问题:PlayerInfo,它是从 Group 扩展的,其中包含一些标签和图像,我必须创建 60 个该组件并将它们全部放入 HGroup。但是在将它们添加到 hgroup 的过程中,我的应用程序只是停止响应几秒钟,这是不能容忍的。我可以用更少的内存使用来实现这一点吗?
我已经阅读了this 页面,并想我是否可以使用我的任何组件来做到这一点,而不仅仅是位图。有人知道该怎么做吗?
我是这样做的:
class PlayerInfo extends Group
private var name:Label;
private var age:Label;
private var photo:Image;
在我的列表类中:
public function addPlayers(arrPlayer:Array):void
for(;;)
var player:PlayerInfo=new PlayerInfo();
HGroup.addElement(player);
【问题讨论】:
最好使用List
和PlayerInfo
作为自定义ItemRenderer。它经过优化,仅在渲染器变得可见时才实例化它们。您的方法将一次创建它们。如果您不需要 List 功能,您可以使用更轻量级的 DataGroup
(虽然我不确定它在移动设备上的表现如何)。
我自学了 flex。我认为我有足够的资格编写应用程序,但现在看来我还有很多需要改进的地方。但是,谢谢你的回答。跨度>
【参考方案1】:
Can I achieve this with less memory usage?
是的!用你目前的方法;如果您有 60 个组件实例,则应用程序会创建 60 个组件实例,将它们全部渲染并放在屏幕上;即使它们当前不是视图区域。
正如@RiaStar 建议的那样,您应该使用一个类,例如 List 或 DataGroup。您的自定义组件 PlayerInfo 应用作 itemRenderer,您从中创建这些组件的“列表”应成为列表的 dataProvider。
完成此操作后,您的应用将利用 List 的渲染器回收。因此,只有屏幕上显示的视觉元素才会显示给用户。因此,如果您的 60 项列表中有 10 项显示在屏幕上;该应用程序将少生成 50 个项目。这将更好地利用处理能力和设备内存。
要将您的类更改为渲染器,您必须实现一个 dataChange() 事件处理程序,以便在列表更改渲染器应显示的数据时更新组件。
我认为我们没有足够的信息来获得更详细的解释。你的数据提供者是什么?需要在您的自定义组件上设置哪些属性?
【讨论】:
非常感谢 Reboog 的回答:D,虽然我没有时间测试这个,但我认为它会起作用,再次感谢你。以上是关于[Flex mobile]关于放置一个自定义组件的多个实例的主要内容,如果未能解决你的问题,请参考以下文章