聊天窗口中表情,圖片,文件的顯示處理

聊天對話框中,除了文字,通常還會有表情,圖片,文件這些的顯示。這些的處理都與文字的處理不同。網絡

1.表情的顯示處理。異步

系統表情的話,通常都內置在程序中了,直接調用出來顯示就能夠了。自定義表情就跟圖片的處理流程同樣了。線程

eg:一個笑臉表情,發送者的程序裏有這張圖片,接收者的程序也有這張圖片。那麼這張圖片就不須要經過文件傳輸發給接收者了,只須要發送一個標示過去告訴接收者這是哪一張系統表情圖片就ok了。圖片

 

我發了一個系統表情給你------》[笑臉]-----》接收到一個笑臉表情的標示----》在系統表情文件夾裏找到笑臉圖片-----》顯示出來給你笑程序

2.圖片的處理im

圖片的處理較之系統表情處理比較麻煩。發送者有這張圖片,接收者不必定有這張圖片。發送一個圖片標示的作法是行不通了,必須將文件圖片發給接收者才能夠。數據

簡單的解決方案:img

我發了一張圖片給你------》圖片文件具體數據----》接收到一個文件{這次要檢測文件是否傳完}-----》顯示出來???(你肯定是圖片,不是文件什麼的)文件

改進a:解決方案

我發了一張圖片給你-----》圖片文件具體數據+[這是個圖片]-----》接收到一個文件,標示爲圖片---》以圖片的形式顯示在對話框

ok,這樣就差很少了。可是在實際操做中,圖片的文件數據通常都比文字大得多,一張圖片的大小甚至夠你發一篇高考做文給對方了。

這樣就有一個問題了,我發一張圖片給你,耗時要10s(圖片大,網絡差),期間,我有發了些文字給你。結果:得等到圖片徹底接收完成才能顯示出來後面的所有消息。若是一次性發送多張圖,那你就等着哭吧。

改進b:

建立接收線程和聊天窗口線程分開,接收線程異步通知聊天窗口更新顯示。建立文件接收線程用來接收文件。三個線程!!可是仍是有問題:文字會先收到,圖片後收到。

改進c:

採用(正在加載圖片)先行佔位,待圖片傳輸完成替換掉。若傳輸失敗(超時),用裂圖替換掉。

嗯,差很少就這樣了。文件的顯示作法同圖片。

實際操做中,採用單例模式定義一個用於接收圖片的管理類。在三個線程中,要注意互斥問題。接收線程收到文件接收表示,啓動文件接收線程去接收文件,並在管理類中壓入該文件信息,文件傳輸完成要把管理類的文件狀態置爲已傳輸完成並通知聊天窗口顯示。還有不少小細節問題,就不詳細展開了。這次僅提供一個思路。

相關文章
相關標籤/搜索