聊天窗口中表情,图片,文件的显示处理

聊天对话框中,除了文字,通常还会有表情,图片,文件这些的显示。这些的处理都与文字的处理不同。网络

1.表情的显示处理。异步

系统表情的话,通常都内置在程序中了,直接调用出来显示就能够了。自定义表情就跟图片的处理流程同样了。线程

eg:一个笑脸表情,发送者的程序里有这张图片,接收者的程序也有这张图片。那么这张图片就不须要经过文件传输发给接收者了,只须要发送一个标示过去告诉接收者这是哪一张系统表情图片就ok了。图片

 

我发了一个系统表情给你------》[笑脸]-----》接收到一个笑脸表情的标示----》在系统表情文件夹里找到笑脸图片-----》显示出来给你笑程序

2.图片的处理im

图片的处理较之系统表情处理比较麻烦。发送者有这张图片,接收者不必定有这张图片。发送一个图片标示的作法是行不通了,必须将文件图片发给接收者才能够。数据

简单的解决方案:img

我发了一张图片给你------》图片文件具体数据----》接收到一个文件{这次要检测文件是否传完}-----》显示出来???(你肯定是图片,不是文件什么的)文件

改进a:解决方案

我发了一张图片给你-----》图片文件具体数据+[这是个图片]-----》接收到一个文件,标示为图片---》以图片的形式显示在对话框

ok,这样就差很少了。可是在实际操做中,图片的文件数据通常都比文字大得多,一张图片的大小甚至够你发一篇高考做文给对方了。

这样就有一个问题了,我发一张图片给你,耗时要10s(图片大,网络差),期间,我有发了些文字给你。结果:得等到图片彻底接收完成才能显示出来后面的所有消息。若是一次性发送多张图,那你就等着哭吧。

改进b:

建立接收线程和聊天窗口线程分开,接收线程异步通知聊天窗口更新显示。建立文件接收线程用来接收文件。三个线程!!可是仍是有问题:文字会先收到,图片后收到。

改进c:

采用(正在加载图片)先行占位,待图片传输完成替换掉。若传输失败(超时),用裂图替换掉。

嗯,差很少就这样了。文件的显示作法同图片。

实际操做中,采用单例模式定义一个用于接收图片的管理类。在三个线程中,要注意互斥问题。接收线程收到文件接收表示,启动文件接收线程去接收文件,并在管理类中压入该文件信息,文件传输完成要把管理类的文件状态置为已传输完成并通知聊天窗口显示。还有不少小细节问题,就不详细展开了。这次仅提供一个思路。

相关文章
相关标签/搜索