一种创建列表的方法及系统的制作方法

文档序号:7916785阅读:170来源:国知局
专利名称:一种创建列表的方法及系统的制作方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种创建列表的方法及系统。
背景技术
IM (Instant Message的缩写,即时消息)联系人列表是指即时通讯客户端软件中可以用 来进行即时通信的帐号列表,它用于存储和管理联系人的信息。联系人列表为保存即时通讯 软件中联系人的基本数据结构,将所有联系人分配到某个逻辑分组内进行分类保存。目前流 行的即时通讯软件中,例如QQ (腾讯公司开发的即时通讯工具)、MSN ( MSN Messenger的 筒称,是微软操作系统自带的即时通讯工具),用户表现在联系人列表中的形式除了显示基本 资料包括头像、昵称、个性签名(联系人自定义的描述信息)之外,还会根据需要显示该联 系人帐号所绑定的业务服务的图标,如显示联系人空间的更新等。故联系人列表不仅是一个 开始联系的入口 ,更是一个关注联系人动态的重要界面组成部分。
IM联系人列表被分成若干个组,某个分组第一次被点击的时候,创建该组的联系人列表。 IM联系人列表的创建涉及到IM用户各类信息的读取包括昵称、头像、增值业务标志,以及 绘制该节点。
现有技术中一种IM联系人列表的创建过程,由以下几个步骤组成
步骤Sll:获取该分组的IM帐号列表;
步骤S12:对该列表中的每个帐号进行如下操作
步骤S121:创建一个空的节点对象并设置其帐号;
步骤S122:在本地文件读取该联系人的状态信息;
步骤S123:在本地文件读取联系人的简单信息(长昵称即用户的个性签名,增值标志位
等);
步骤S124:设置联系人节点的相关属性; 步骤S125:将昵称更新到界面; 步骤S126:读取头像文件,更新到界面; 步骤S127:设置状态; 步骤S128:进行消息4是示。
其中将步骤S125- S128定义为界面数据装载过程。 步骤S13: 对联系人列表进行排序; 步骤S14: 绘制联系人列表。
使用上述联系人创建的方法对某分组的196个联系人节点进行创建后效果如图1所示, 耗时1200ms (ms即毫秒)。
当用户的某个联系人分组的联系人节点数目有400个的时候,利用上述方法创建联系人列表(用户点击该分组到用户看到联系人列表)将需要2000ms,主要时间(70%)花费在对 400个联系人节点界面数据装载过程,可见大量一次性地进行界面数据装载给联系人列表的 创建和显示带来巨大问题。并且可以想象,如果用户的某个联系人分组中联系人数目更多的 话,创建联系人列表需要花费更多时间,将会严重影响用户的使用体验。

发明内容
本发明实施例的目的是提供一种创建列表的方法和系统以解决现有技术中当列表项目较 多需要大量一次性地进行界面数据装载而导致列表创建速率慢的问题。
本发明实施例的另 一个目的是提供一种创建列表的方法和系统以解决现有技术中当即时 通讯工具的主面板中的联系人过多导致联系人列表呈现速率慢的问题。
本发明实施例提供的技术方案是 一种创建列表的方法,包括如下步骤,
获取需要创建的项目列表;
为每个项目创建一个空的节点对象,将其与列表中的项目相关信息关联起来并设置节点
属性;
装载处于用户可见区域且第一次被绘制的节点的界面数据; 才艮据界面数据绘制处于用户可见区域的节点。
进一步地,所述为每个项目创建一个空的节点对象,将其与列表中的项目相关信息关联 起来并设置节点属性具体包括,
创建一个空的节点对象并将该节点和项目的识别帐号关4关起来; 读取所述项目的识别帐号的相关信息; 根据读取的相关信息设置所述节点的相关属性。
进一步地,所述装载处于用户可见区域且第一次被绘制的项目的界面数据具体包括, 给项目列表发送一个绘制消息;
判断项目列表上的每个项目节点是否处于用户可见区域; 将所述绘制消息发送给处于用户可见区域的项目节点; 判断所述处于用户可见区域的项目节点是否为第一次被绘制; 装载处于用户可见区域且第一次被绘制的项目的界面数据。
其中,所述判断项目列表上的每个项目节点是否处于用户可见区域具体包括,根据屏幕 捕获到的窗口中项目列表的总高度除以单个项目节点的高度即得到需要绘制的项目节点数 目。
其中,所述判断该节点是否第一次被绘制具体包括,在项目节点的数据结构中设置一个 变量存放该节点是否被创建过的信息。
合适地,创建节点列表并将其与项目列表中的相关信息关联起来之后还包括对所述项目 列表进行排序的步骤。
优选地,所述项目的识别帐号是指唯一能够确定该项目身份的帐号,所述项目的识别帐
号的相关信息包括项目的名称、项目的状态信息。
优选地,所述项目列表为即时通讯联系人列表。所述项目的识别帐号为即时通讯联系人 帐号,所述识别帐号的相关信息包括联系人的昵称、长昵称、增值标志位、自定义头像以及 联系人状态信息。
一种创建列表的系统,包括项目列表获取单元,获取需要创建的项目列表,其特征在于 还包括,
节点创建与设置单元,与所述项目列表获取单元连接,用于为每个项目创建一个空的节
点对象,将其与所获取的项目列表中的相关信息关联起来并设置节点属性;
节点界面数据装载单元,与节点创建与设置单元连接,用于在节点创建与设置完成后装
载处于用户可见区域且第 一次被绘制的节点的界面数据供节点绘制单元调用;
节点绘制单元,与节点界面数据装载单元连接,根据从内存中获取的节点界面数据绘制
处于用户可见区域的节点。
进一步地,所述节点界面数据装载单元还包括,
用户可见区域判断单元,判断项目列表上的每个项目节点是否处于用户可见区域,如果 处于用户可见区域则向新节点判断单元发送绘制消息;
新节点判断单元,在接收到用户可见区域判断单元发送来的绘制消息后判断所述处于用 户可见区域的项目节点是否为第一次被绘制,如果是第一次被绘制,则向界面数据装载单元 发送数据装载通知;
界面数据装载单元,根据新节点判断单元发送来的数据装载通知进行节点界面数据的装载。
合适地,所述系统还包括排序单元,与所述节点创建与设置单元连接,在进行完节点创 建和设置之后对所述项目列表进行排序,然后再进行节点界面数据的装载。
利用本发明实施例提供的方法和系统将本来应该集中处理的多个列表项目的节点界面数 据加载操作打散为一批一批加载,大大减少了一次性在内存中装载的节点界面的数据量,提 高了界面呈现的速率。
另外,利用本发明实施例提供的方法和系统将即时通讯工具主面板中本来应该集中处理 的多个联系人节点界面数据加载操作打散为一批一批加载,在不影响联系人列表显示质量的 情况下,有效的提升了创建联系人列表的速率。


图1是现有技术中IM联系人列表创建后的效果图2是本发明实施例一提供的一种创建列表的方法流程图3是本发明实施例二提供的一种创建列表的系统结构示意图4是本发明实施例三提供的 一种创建列表的方法流程图4a是本发明实施例三提供的一种创建列表的方法中为每个项目创建一个空的节点对 象,将其与列表中项目的相关信息关联起来并设置节点属性的具体操作流程图4b是本发明实施例三提供的一种创建列表的方法中绘制联系人列表的具体步骤流程
图5是本发明实施例三提供的一种创建列表的方法中列表项目的节点数据结构的示意
图6是本发明实施例三提供的 一种的IM联系人列表创建后的效果图。
具体实施例方式
为使本发明的目的、技术方案更加清楚明白,以下参照附图并结合实施例,对本发明做 进一步的详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限 定本发明。
如图2所示,根据本发明提供的一种创建列表的方法,包括如下步骤, 步骤S21:获取需要创建的项目列表;
步骤S22:为每个项目创建一个空的节点对象,将其与列表中项目的相关信息关联起来 并设置节点属性,具体包括,
步骤S221:创建一个空的节点对象并将该节点和项目的识别帐号关4关起来,项目的识别 帐号是指唯一能够确定该项目身份的帐号,项目的识别帐号的相关信息包括项目的名称、项 目的状态等;
步骤S222:在本地文件中或在与所述客户端连接服务器的数据库中读取所述识别帐号的 相关信息;
步骤S223:根据读取的相关信息设置所述节点的相关属性; 步骤S23:对联系人列表进行排序;
步骤S24:在内存中装载处于用户可见区域且第一次被绘制的节点的界面数据并根据界 面数据绘制处于用户可见区域的节点,具体包括, 步骤S241:给项目列表首先发送一个绘制消息; 步骤S242:判断项目列表上的每个项目节点是否处于用户可见区域; 步骤S243:将所述绘制消息发送给处于用户可见区域的项目节点; 步骤S244:判断所述处于用户可见区域的项目节点是否为第一次被绘制; 步骤S245:在计算机内存中装载处于用户可见区域且第一次被绘制的节点的界面数据; 步骤S246:才艮据界面数据绘制处于用户可见区域的节点。
在步骤S246中,所述界面数据包括两个部分, 一部分是指步骤S245中所装载的界面数 据,另一部分是指在步骤S245之前已经存在于内存中的、即绘制过的、并且当前处于用户可 见区域的节点的界面数fe 。
当拖动项目列表的滚动条时,有些项目会消失,即由处于可见区域变为处于非可见区域, 此时对于这些项目的界面数据既不进行装载和/或绘制,也不会从内存中释放掉,待下次项目 又重新出现在用户可见区域的时候再被调用;有些项目会出现,而这些出现的项目中有的是 首次出现的,有的是重新出现的,此时对于首次出现的项目进行界面数据的装载和节点的绘 制,对于重新出现的项目则直接调用内存中保存的界面数据进行节点的绘制。
当然也可以不对项目列表进行排序,即只是根据数据的原始存放顺序创建列表,并不影 响本发明的实现。
本发明实施例通过在创建列表的时候首先对列表项目节点是否在可见区域进行判断,对 于在可见区域的节点再对其是否被第一次被绘制进行判断,对于那些处于可见区域并且是第 一次被绘制的节点才进行界面数据的装载;对于处于非可见区域且从未被绘制过的节点不会
进行界面数据的装载和绘制;对于处于可见区域且已经被绘制过的节点直接从内存中调用之
前已装载过的节点界面数据并进行绘制,从而大大减少了 一次性在内存中装载的节点界面的 数据量,提高了创建列表的速率。在需要进行列表创建的客户端软件中应用本发明的方法和 系统可以大大提高界面呈现的速率。
如图3是本发明实施例^是供的一种创建列表的系统的结构图,包括项目列表获取单元31, 获取需要创建的项目列表;节点创建与设置单元32,与所述项目列表获取单元31连接,用 于为每个项目创建一个空的节点对象,将其与列表中的项目相关信息关联起来,具体包括先 将该节点和该项目的识别帐号关联起来,然后在信息存储单元中读取所述项目的识别帐号的 相关信息,例如项目的名称和状态并根据所述识别帐号的相关信息对所述节点的相关属性进 行设置。排序单元35,与所述节点创建与设置单元32连接,在进行完节点创建和设置之后 对所述项目列表进行排序;节点界面数据装载单元33,与所述节点绘制单元34连接,用于 在节点创建与设置完成后在计算机内存中装载处于用户可见区域且第 一次被绘制的节点的界 面数据,并通知节点绘制单元34进行节点绘制;节点绘制单元34,根据内存中装载的界面 数据绘制处于用户可见区域的节点。
所述节点界面数据装载单元33进一步还包括,用户可见区域判断单元331,判断项目列 表上的每个项目节点是否处于用户可见区域,如果处于用户可见区域则向新节点判断单元332 发送绘制消息;新节点判断单元332,在接收到用户可见区域判断单元331发送来的绘制消 息后判断所述处于用户可见区域的项目节点是否为第一次被绘制,如果是第一次被绘制,则 向界面数据装载单元333发送数据装载通知;界面数据装载单元333,根据新节点判断单元 332发送来的数据装载通知在计算机内存中进行节点界面数据的装载。
需要说明的是本发明图中各单元之间的连接关系是为了清楚阐释信息和数据控制的过 程,因此应当视为逻辑上的连接而非限于实际的物理连接。
本发明实施例提供的一种创建列表方法和系统可以应用于即时通讯软件的主面板中的联 系人列表显示,即列表中的项目为联系人。该方案通过判断哪些联系人在主面板的用户可见 区域,只对这些处于用户可见区域的联系人节点进行界面绘制;同时只在第一次绘制某个联 系人节点的时候才去加载该联系人的界面数据。
在一个较佳的实施例中,提供了如图4所示的一种创建列表方法。为了清楚的阐述该实 施例,以图1中的联系人"叨客机器人"为一个具体的联系人节点进行说明,当即时通讯客户 端第一次展开联系人列表的时候,进行如下步骤
步骤S41:获取该客户端默认分组的IM联系人帐号列表,该列表中包括联系人"叨客机 器人";
步骤S42:为每个联系人创建一个空的节点对象,将其与列表中联系人的相关信息关联 起来并设置节点属性,如图4a所示具体包括进行如下操作
步骤S421:为每个联系人创建一个空的节点对象并设置其帐号,即在账号字段填充联系 人的帐号,如图5所示一个具体的实施方式中联系人节点的数据结构包括
Uin,用于存放账号字段,在该字段填充"叨客机器人"的即时通讯客户端ID (ID是英文 IDentity的缩写,ID是身份标识)号码;
步骤S422:在本地文件读取该联系人的状态信息,例如在用户信息文件(User.db)中读取 "叨客机器人"的状态信息;
步骤S423:在本地文件读取该联系人的简单信息,例如在信息文件(User.db)中读取"叨 客机器人,,的增值标志位、昵称,长昵称(即用户的个性签名),自定义头像等;
步骤S424:设置联系人节点的相关属性,即根据上述获取的简单信息对节点属性进行配 置,包括增值标志位、昵称,长昵称,自定义头像等;
具体的配置方式是根据获取的简单信息在如图5所示的数据结构中进行数据的填充,包

Label是存放昵称的字段,在该字段填充"叨客机器人,,; Labelex是存放个性签名的字段,在该字段填充"嘮唠叨叨,其乐滔滔,,; HeadFilePath是存放自定义头像文件路径的字段; vsaFlag是存放增值标志位的字段,用以表示联系人开通的增值服务; ForwardFlag是联系人头像前置图标的标志位,用以表示联系人的在线状态; 步骤S43:对联系人列表进行排序,在一个优选的实施方式中,将处于登录状态的联系 人排列在处于非登陆状态联系人的前面;而对于处于登录状态的联系人列表部分和处于非登 录状态的联系人列表部分分别按照英文字母的排列顺序或者汉语拼音的排列顺序进行排列; 步骤S44:绘制联系人列表,如图4b所示具体包括如下步骤 步骤S441:给联系人列表发送一个绘制消息;
步骤S442:判断联系人列表上的每个联系人节点是否处于用户可见区域,即判断哪些节 点数据需要被绘制,具体的判断方法可以为先根据屏幕捕获到的主面板中用户可见的联系 人列表的总高度除以单个联系人节点的高度即得到需要绘制的联系人的节点数目,如果所得 的商为非整数则将所述非整数的d、数位去掉后再加一作为需要绘制的联系人的节点数目,即 只有部分处于可见区域的节点界面数据也需要被绘制,对于处于用户非可见区域的联系人节
点不进行绘制,即结束本流程;
步骤S443:给处于用户可见区域的联系人节点发送绘制消息;
步骤S444:在联系人节点的绘制消息的响应函数中进行如下操作
判断该节点是否第一次被绘制,具体的判断方法可以为在联系人节点的数据结构中设
置一个变量存放该节点是否被创建过的信息,如图5所示数据结构中的bCreate字段,该字段
表示该节点是否已经真正创建过;如果判断结果为否则直接跳步骤S446,如果判断结果为是, 则执行步骤445;
步骤S445:在计算机内存当中装载该节点的界面数据,然后执行步骤S446;
步骤S446:根据界面数据绘制处于用户可见区域的节点,例如使用GDI (Graphics Device Interface图形设备接口 )绘图方式绘制所述节点,在优选的实施方式中对于只有部分处于可 见区域的节点,虽然界面数据已经装载在内存中,但可以只对其处于用户可见区域的部分进 行绘制,被主面板遮挡的部分可以不进行绘制。
使用上述联系人创建方法对某分组中的196个联系人节点进行创建后效果如图6所示, 耗时200ms。对比现有技术,在具有相同数目联系人的情况下,达到了同样的联系人列表显 示效果,在创建速率方面提高了数倍。
本发明的一个优选实施例中,当用户拉动联系人分组的滚动条要查看尚未加载界面数据的联 系人时,会触发paint消息(即绘制消息).,对需要显示的联系人节点加载界面数据并绘制。 而对于之前已经显示过的联系人节点变成不显示时,节点的界面数据将继续存在内存中,并 不进行释放,当然也不进行绘制。对于已经显示过的节点变成不显示后又要进行显示时,无 需进行界面数据的加载,只需要调用存放在内存中的界面数据重新绘制 一 次即可。
本发明实施例提供的一种创建列表方法和系统还可以应用于其它具有项目列表的软件工 具上,例如音乐播放器,判断哪些歌曲在主面板的用户可见区域,只对处于用户可见区域的 歌曲节点进行界面绘制;同时在第一次绘制某个歌曲节点的时候才去加载该歌曲的界面数据。 以创建某网络音乐播放器的播放列表为例,具体包括如下步骤
获取该音乐播放器客户端用户默认播放的歌曲列表;
对所述歌曲播放列表中的每首歌曲进行如下操作
创建一个空的节点对象并设置其ID,该ID为唯一能标识该首歌曲网络地址的URL (Uniform Resource Locator的缩写,中文为统 一 资源定位符);
在本地文件读取该歌曲的相关信息,所述相关信息包括歌曲名称、歌手名、歌曲时长等; 根据上述读取的相关信息设置歌曲节点的相关属性;
对歌曲列表进行排序,在一个优选的实施方案中,根据用户的收听频率排列,即将用户 听得最多的排在最前面;
绘制歌曲列表,具体包括如下步骤 给歌曲列表发送一个绘制消息;
歌曲列表上的每个歌曲节点判断一下是否要绘制,即判断是否在用户可见区域; 给处于用户可见区域的歌曲节点发送绘制消息; 在歌曲节点的绘制消息的响应函数中进行如下操作
判断该节点是否第一次被绘制,不是的话直接跳到下一步,否则在计算机内存中装载该 节点的界面数据再执行下 一 步;
根据界面数据绘制处于用户可见区域的节点。
当网络歌曲播放器客户端中的歌曲列表有几百甚至上千首歌曲的时候使用上述方法对播
放列表进行创建,在不影响列表界面显示效果的情况下,大大提高了列表创建的速率。当然 也可以不对歌曲列表进行排序,即只是根据默认的播放顺序创建列表,并不影响本发明的实 现。
本发明实施例提供的一种创建列表方法和系统还可以应用到其他客户端软件的列表创建 上,尤其适用于即时通讯客户端的联系人列表的创建,实现方法与上述实施例相似,故在此 不做赘述。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原 则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种创建列表的方法,其特征在于,包括如下步骤,获取需要创建的项目列表;为每个项目创建一个空的节点对象,将其与列表中的项目相关信息关联起来并设置节点属性;装载处于用户可见区域且第一次被绘制的节点的界面数据;根据界面数据绘制处于用户可见区域的节点。
2、 根据权利要求1所述的创建列表的方法,其特征在于,所述为每个项目创建一个空的 节点对象,将其与列表中的项目相关信息关联起来并设置节点属性具体包括,创建一个空的节点对象并将该节点和项目的识别帐号关联起来; 读取所述项目的识别帐号的相关信息; 根据读取的相关信息设置所述节点的相关属性。
3、 根据权利要求1或2所述的创建列表的方法,其特征在于,所述装载处于用户可见区 域且第 一次被绘制的项目的界面数据具体包括,给项目列表发送一个绘制消息;判断项目列表上的每个项目节点是否处于用户可见区域; 将所述绘制消息发送给处于用户可见区域的项目节点; 判断所述处于用户可见区域的项目节点是否为第一次被绘制; 装载处于用户可见区域且第一次被绘制的项目的界面数据。
4、 根据权利要求3所述的创建列表的方法,其特征在于,所述判断项目列表上的每个项 目节点是否处于用户可见区域具体包括,根据屏幕捕获到的窗口中项目列表的总高度除以单个项目节点的高度即得到需要绘制的 项目节点数目。
5、 根据权利要求3或4所述的创建列表的方法,其特征在于,所述判断该节点是否第一 次被绘制具体包括,在项目节点的数据结构中设置一个变量存放该节点是否被创建过的信息。
6、 才艮据权利要求1所述的创建列表的方法,其特征在于,创建节点列表并将其与项目列 表中的相关信息关联起来之后还包括对所述项目列表进行排序的步骤。
7、 根据权利要求2所述的创建列表的方法,其特征在于,所述项目的识别帐号是指唯一 能够确定该项目身份的帐号,所述项目的识别帐号的相关信息包括项目的名称、项目的状态 信息。
8、 根据权利要求1所述的创建列表的方法,其特征在于,所述项目列表为即时通讯联系人列表。
9、 根据权利要求8所述的创建列表的方法,其特征在于,所述项目的识别帐号为即时通 讯联系人帐号,所述识别帐号的相关信息包括联系人的昵称、长昵称、增值标志位、自定义 头像以及联系人状态信息。
10、 一种创建列表的系统,其特征在于,包括项目列表荻取单元,获取需要创建的项目 列表,其特征在于还包括,节点创建与设置单元,与所述项目列表荻取单元连接,用于为每个项目创建一个空的节点对象,将其与所荻取的项目列表中的相关信息关联起来并设置节点属性; 节点界面数据装载单元,与节点创建与设置单元连接,用于在节点创建与设置完成后装载处于用户可见区域且第一次被绘制的节点的界面数据供节点绘制单元调用;节点绘制单元,与节点界面数据装载单元连接,根据从内存中获取的节点界面数据绘制处于用户可见区域的节点。
11、 根据权利要求IO所述的创建列表的系统,其特征在于,所述节点界面数据装载单元 还包括,用户可见区域判断单元,判断项目列表上的每个项目节声、是否处于用户可见区域,如果 处于用户可见区域则向新节点判断单元发送绘制消息;新节点判断单元,在接收到用户可见区域判断单元发送来的绘制消息后判断所述处于用 户可见区域的项目节点是否为第一次被绘制,如果是第一次被绘制,则向界面数据装载单元 发送数据装载通知;界面数据装载单元,根据新节点判断单元发送来的数据装载通知进行节点界面数据的装载。
12、 根据权利要求IO所述的创建列表的系统,其特征在于,还包括排序单元,与所述节点创建与设置单元连接,在进行完节点创建和设置之后对所 迷项目列表进行排序,然后再进行节点界面数据的装栽。
全文摘要
本发明提供了一种创建列表的方法,包括如下步骤获取需要创建的项目列表;为每个项目创建一个空的节点对象,将其与列表中的项目相关信息关联起来并设置节点属性;装载处于用户可见区域且第一次被绘制的节点的界面数据;根据界面数据绘制处于用户可见区域的节点。本发明还相应地提供了一种创建列表的系统。利用本发明实施例提供的方法和系统将本来应该集中处理的多个列表项目的节点界面数据加载操作打散为一批一批加载,大大减少了一次性在内存中装载的节点界面的数据量,提高了界面呈现的速率。
文档编号H04L12/58GK101345721SQ20081013104
公开日2009年1月14日 申请日期2008年8月14日 优先权日2008年8月14日
发明者刘晓宇, 宏 姜 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1