一、概述
在進行了?rap?的基本學習之后,您對?rap?的理解是否進入了更高的一個層次呢,個人覺得,對學習?rap?的人來說,進行?rap?的學習是一個探索的過程,在編程中不斷的對其進行理解和分析,下面就?rap?在實際應用中用到的一些知識做一總結,好了,別不多說,下面進入正題,?rap?圖片、數據緩存的處理。
二、緩存處理的原因
?????可能你要問為什么要將這個圖片、數據的緩存問題提到書面上來呢,作為一個編程人員來將,做緩存的處理不是每個程序員都應該知道的事情嗎?但是,我要說正是這個大家覺得習以為常的東西就更要提到書面中來,做一警惕。
三、緩存圖片的處理
1?、問題的發生
在我們開發的項目中,發現了這樣一個現象,運行?rap?的項目,速度非常的慢,在我們工程的界面上左側是一棵用?treeViewer?構建的樹,樹的數據量也不是很大,每個樹節點上有圖片的信息,打開這棵樹的過程就需要?6?到?7?秒的時間。最后發現是每一個樹上的節點的創建過程都重新加載了圖片引起的。當把圖片放入到了緩存中速度明顯就提升上來了。具體的看看代碼中是怎么的實現吧。
?
2?、圖片緩存的處理
1)?、圖片緩存類?ImageUtil?,處理圖片從緩存中獲取,如果緩存中沒有該圖片的信息,那么通過圖片的路徑將圖片加載到緩存中來,在從緩存中獲取圖片的信息,這樣就不用每次都加載圖片,加載一次可復用多次。
?
[java]?view plaincopy print?
import?java.net.MalformedURLException;??import?java.net.URL;????import?org.apache.log4j.Logger;??import?org.eclipse.jface.resource.ImageDescriptor;??import?org.eclipse.jface.resource.ImageRegistry;??import?org.eclipse.swt.graphics.Image;????public?class?ImageUtil?{??????private?static?Logger?log?=?Logger.getLogger(ImageUtil.class);??????private?static?ImageRegistry?registry?=?new?ImageRegistry();????????????????public?static?Image?getImage(String?fileName)?{??????????Image?image?=?registry.get(fileName);??????????if?(image?==?null)?{??????????????URL?folderURL?=?null;??????????????try?{??????????????????folderURL?=?new?URL("file:"?+?PathUtil.getIconPath(fileName));??????????????????image?=?ImageDescriptor.createFromURL(folderURL).createImage();??????????????????registry.put(fileName,?ImageDescriptor.createFromURL(folderURL));??????????????}??????????????catch?(MalformedURLException?e)?{??????????????????log.error("getImage?error:",?e);??????????????}??????????}??????????return?image;??????}???????} ? 2)?、處理圖片路徑的類?PathUtil?,該類處理加載的圖片的路徑,根據一個圖片的名稱,尋找圖片的路徑。
[java]?view plaincopy print?
import?org.apache.log4j.Logger;??import?org.eclipse.core.runtime.FileLocator;??import?org.eclipse.core.runtime.Platform;????import?telecomui.application.Activator;????public?class?PathUtil??{??????private?static?Logger?log?=?Logger.getLogger(PathUtil.class);????????????????public?static?String?getRoot()?{??????????String?path?=?null;??????????try?{??????????????path?=?FileLocator.toFileURL(Platform.getBundle(Activator.PLUGIN_ID).getEntry(""))??????????????????????.getPath();??????????????path?=?path.substring(path.indexOf("/")?+?1,?path.length());??????????}??????????catch?(Exception?e)?{??????????????log.error("getRoot?method?:",?e);??????????}??????????return?path;??????}????????????????public?static?String?getIconPath(String?fileName)?{??????????String?rootPath?=?getRoot();??????????return?rootPath?????????????????+?"icons/"?+?fileName;??????}??}?? ?
3?、用法
在用到圖片的地方,調用工具類?ImageUtil?中的?getImage(fileName)?就可以了,其中參數?fileName?是圖片的名稱。此外需要注意下,所有圖片是放到?icons?目錄下的。具體的實現類在這就不列出代碼了。
四、數據緩存的處理
數據緩存的原理很簡單,就是將要加載的數據先存到一個位置,用的時候直接從這個位置中取出就可以了,不用每次用的時候都要創建連接數據庫的信息并從數據庫中讀數據,若想要更新的數據,就要出現個刷新按鈕了,刷新一下,從數據庫中讀出新數據更新緩存,用的時候還是從緩存中取數據信息。
下面說說我們項目中用到的數據緩存的實現原理。
因為我們項目中用到的數據基本上是組裝樹結構的數據,所以將數據以?list?的形式存放的。具體思路是:從數據庫中查詢出來的數據存放到?list?中,當項目中調用數據庫數據的時候就是從這個?list?中取得,當刷新數據的時候在更新對應的?list?中的數據就可以了。
代碼的實現也是很簡單,這里就不粘代碼了,簡單介紹下實現方案。定義一個緩存?list?存放數據,提供一個方法?a?將數據存放到這個?list?中來,并對外提供一個獲得這個?list?的接口方法?b?,外界來調用這個接口方法?b?獲得數據,當要刷新數據的時候就直接調用?a?方法。
?
轉載于:https://www.cnblogs.com/dengyungao/p/7503661.html
總結
以上是生活随笔為你收集整理的Eclipse rap 富客户端开发总结(14) :rap 图片、数据缓存处理的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。