圖片內(nèi)存管理方法及裝置的制造方法
【技術(shù)領域】
[0001]本發(fā)明涉及移動設備內(nèi)存管理技術(shù)領域,具體涉及安卓操作系統(tǒng)的圖片內(nèi)存管理方法及裝置。
【背景技術(shù)】
[0002]安卓操作系統(tǒng)(以下簡稱系統(tǒng))已經(jīng)運用于包括手機、平板、機頂盒等多種設備中,手機、平板、機頂盒等已經(jīng)成為人們休閑娛樂不可缺少的設備。
[0003]這些設備跟用戶進行交互的時候使用的都是文字或文字與圖片的組合,顯示界面切換的越多,需要使用的圖片越多。
[0004]系統(tǒng)給應用程序的可使用內(nèi)存空間是有限的,而加載一張IM的圖片到內(nèi)存中會大概占用1M的內(nèi)存,而系統(tǒng)為每一個dalvik虛擬機分配的內(nèi)存是有限的,例如google的Gl中,分配給應用程序的堆內(nèi)存只有16M,后來的設備一般都為24M、36M,版本比較新的系統(tǒng)分配給應用程序的可用內(nèi)存是64M,而一個應用程序?qū)D片加載到內(nèi)存中不可能使用全部的可使用內(nèi)存,只能是一部分,需要另一部分讓應用程序其他的信息加載到內(nèi)存中計算運行。
[0005]但是64M的內(nèi)存對需要加載很多圖片的應用程序來說,也是很少的,加載不了幾張圖片就會出現(xiàn)內(nèi)存溢出(00M,Out Of Memory)的情況,出現(xiàn)這種情況時,應用程序往往會被系統(tǒng)強制關閉掉,給用戶的使用帶來了極大的不便。
[0006]目前存在兩種方法來解決內(nèi)存溢出的問題:
一種是降低圖片的分辨率,來減少圖片可占用的內(nèi)存空間大小的方式來解決。
[0007]這種方法是以犧牲圖片的分辨率為代價的,圖片的顯示效果會變低,達不到預期的顯示效果;另外,如果加載的圖片太多的話,還是會達到應用程序可使用的內(nèi)存上限的,該問題還是沒有完全解決,只是可以使用的圖片增多了。
[0008]另一種是增大應用程序的可使用內(nèi)存空間大小。
[0009]這種方法則是提高了圖片的內(nèi)存空間大小,但是由于移動終端普遍內(nèi)存空間有限,這個增大的內(nèi)存空間還是會有個上限的。
[0010]同時,增大了圖片使用的內(nèi)存空間,則減少了應用程序其他可用空間的大小,從而在一定應用程序上降低了應用程序的運行效率。
[0011]同樣的如果應用程序需要使用的圖片太多,還是會達到應用程序的可使用內(nèi)存上限。
[0012]以上兩種方案來看,都沒有從根本上解決圖片使用內(nèi)存空間不足的問題。
【發(fā)明內(nèi)容】
[0013]本發(fā)明的目的為提供徹底解決使用安卓操作系統(tǒng)瀏覽大批量圖片時出現(xiàn)的內(nèi)存溢出問題的安卓操作系統(tǒng)的圖片內(nèi)存管理方法。
[0014]為此,本發(fā)明采用以下技術(shù)方案: 圖片內(nèi)存管理方法,包括以下步驟:
a.創(chuàng)建Lrucache硬引用緩存模塊,設置Lrucache硬引用緩存模塊I的緩存最大值;
b.創(chuàng)建軟引用圖片緩存模塊,設置軟引用圖片緩存模塊可保存的圖片數(shù)量;
c.創(chuàng)建加入圖片緩存模塊,加入圖片緩存模塊3根據(jù)應用程序傳入的圖片地址將圖片加載到內(nèi)存中的Lrucache硬引用緩存模塊;
d.創(chuàng)建獲取圖片緩存模塊,當應用程序需要使用之前保存的圖片時,傳入圖片地址以及尺寸到獲取圖片緩存模塊;
獲取圖片緩存模塊將應用程序傳入的圖片地址以及尺寸組成的字符串傳入Lrucache硬引用緩存模塊以獲取這張圖片,如果有獲取則返回圖片給應用程序;
如果沒有獲取,則將圖片地址以及尺寸組成的字符串傳入軟引用緩存模塊以獲取這張圖片,如果有獲取則返回圖片給應用程序;如沒有獲取則提示應用程序此圖片還沒有加載到內(nèi)存中,需要重新將圖片地址以及尺寸傳入加入圖片緩存模塊中。
[0015]本發(fā)明另一目的還提供了圖片內(nèi)存管理裝置,其特征在于,包括:
Lrucache硬引用緩存模塊;
軟引用圖片緩存模塊;
加入圖片緩存模塊,加入圖片緩存模塊根據(jù)應用程序傳入的圖片地址將圖片加載到內(nèi)存中的Lrucache硬引用緩存模塊;
獲取圖片緩存模塊,當應用程序需要使用之前保存的圖片時,傳入圖片地址以及尺寸到獲取圖片緩存模塊;
獲取圖片緩存模塊將應用程序傳入的圖片地址以及尺寸組成的字符串傳入Lrucache硬引用緩存模塊以獲取這張圖片,如果有獲取則返回圖片給應用程序;
如果沒有獲取,則將圖片地址以及尺寸組成的字符串傳入軟引用緩存模塊以獲取這張圖片,如果有獲取則返回圖片給應用程序;如沒有獲取則提示應用程序此圖片還沒有加載到內(nèi)存中,需要重新將圖片地址以及尺寸傳入加入圖片緩存模塊中。
[0016]本發(fā)明提供的安卓操作系統(tǒng)的圖片內(nèi)存管理方法及裝置可優(yōu)化應用程序的圖片內(nèi)存使用,使用戶瀏覽圖片清晰順暢,提升了用戶體驗。
【附圖說明】
圖1為本發(fā)明實施例的安卓操作系統(tǒng)的圖片內(nèi)存管理裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0017]以下結(jié)合附圖及具體實施例對本發(fā)明作進一步說明。
[0018]參照圖1。
[0019]本實施例提供的適用于安卓操作系統(tǒng)的圖片內(nèi)存管理方法包括以下步驟。
[0020]a.創(chuàng)建Lrucache硬引用緩存模塊1,設置Lrucache硬引用緩存模塊I的緩存最大值。
[0021]Lrucache硬引用緩存模塊I是基于Lru算法的緩存模塊,Lru算法的原理是把近期最少使用的數(shù)據(jù)給移除掉。
[0022]設置Lrucache硬引用緩存模塊I的緩存最大值,一般為應用程序可使用的內(nèi)存的1/8,可根據(jù)設備或者應用程序的需要來設置Lrucache硬引用緩存模塊I的大小。
[0023]Lrucache硬引用緩存模塊I是以key和value值來保存數(shù)據(jù)的,當需要保存圖片數(shù)據(jù)時,以圖片的地址以及尺寸組成的字符串為key、加載到內(nèi)存中的圖片bitmap為value將圖片保存到內(nèi)存中。使用圖片的時候,根據(jù)圖片的地址以及尺寸組成的字符串到Lrucache硬引用緩存模塊I讀取即可。
[0024]當保存到Lrucache硬引用緩存模塊I中的圖片總大小超過Lrucache硬引用緩存模塊I的緩存最大值時,根據(jù)Lru算法將近期最少使用的圖片移出Lrucache硬引用緩存模塊1,移出的圖片對于應用程序可能還需要,所以移出的圖片不從內(nèi)存中釋放。
[0025]b.創(chuàng)建軟引用圖片緩存模塊2,設置軟引用圖片緩存模塊2可保存的圖片數(shù)量。
[0026]例如設置軟引用圖片緩存模塊2可保存的圖片數(shù)量為10時,表示軟引用圖片緩存豐旲塊2可以保存10張圖片。
[0027]步驟a中Lrucache硬引用緩存模塊I移出的圖片是加入到軟引用圖片緩存模塊2的集合隊列首列,加入軟引