Http網(wǎng)絡工具類,主要包括httpGet、httpPost以及http參數(shù)相關方法,以httpGet為例:staticHttpResponsehttpGet(HttpRequestrequest)staticHttpResponse。
我們提供的服務有:成都網(wǎng)站建設、成都網(wǎng)站設計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、亞東ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的亞東網(wǎng)站制作公司
httpGet(java.lang.StringhttpUrl)staticStringhttpGetString(StringhttpUrl)包含以上三個方法,默認使用gzip壓縮,使用bufferedReader提高讀取速度。HttpRequest中可以設置url、timeout、userAgent等其他http參數(shù)HttpResponse中可以獲取返回內(nèi)容、http響應碼、http過期時間(Cache-Control的max-age和expires)等前兩個方法可以進行高級參數(shù)設置及豐富內(nèi)容返回,第三個方法可以簡單的傳入url獲取返回內(nèi)容,httpPost類似。更詳細的設置可以直接使用HttpURLConnection或apache的HttpClient。源碼可見HttpUtils.java,更多方法及更詳細參數(shù)介紹可見HttpUtilsApiGuide。
內(nèi)容整理自網(wǎng)絡。
在做內(nèi)存優(yōu)化的時候,我們發(fā)現(xiàn)除了解決內(nèi)存泄露問題,剩下的就只有想辦法減少真實的內(nèi)存占用。而在App中,大部分內(nèi)存可能被我們圖片占用了,所以減少圖片的內(nèi)存占用可以帶來直接的效果。本文就簡單介紹一張圖片到底占用多少內(nèi)存,我們先假設我們有一張圖片時** 600 * 800** 的,圖片占用空間大小假設是** 100KB**。
圖片內(nèi)存大小跟占用空間大小有什么關系?
占用空間的大小不是圖片占用內(nèi)存的大小,一些初學者可能會誤解一下。占用空間是在磁盤上占用的空間,內(nèi)存大小是加載到內(nèi)存中占用的內(nèi)存大小。兩個只是單位是一樣的,本質(zhì)不是一個概念。
一張圖片到底占用多少內(nèi)存呢?(ARGB_8888編碼)
1. 圖片占用內(nèi)存的計算公式: 圖片高度 * 圖片寬度 * 一個像素占用的內(nèi)存大小
2. 所以上面的圖片占用內(nèi)存是:**800 * 600 * 4 byte = 1875KB = 1.83M **
上面的計算公式中,為什么是4byte呢?文章后面有總結(jié)哦
圖片所在目錄對內(nèi)存的影響?
在Android中,圖片的存放目錄和手機的屏幕密度影響圖片最終的大小,舉個例子:
假設我們的圖片放到 xhdpi 目錄下,那么我們本文中的圖片占用的內(nèi)存大小如下:
屏幕密度為2的設備:800 * 600 * 4byte = 1.83M
屏幕密度為3的設備:800 * 1.5 * 600 * 1.5 * 4byte = 1.83 * 2.25M =** 4.12M**
所以,計算圖片占用內(nèi)存大小的時候,要考慮圖片所在的目錄跟設備密度,這兩個因素其實影響的是圖片的高寬,android會對圖片進行拉升跟壓縮。
總結(jié)
1. 圖片確實很占用內(nèi)存,內(nèi)存優(yōu)化先考慮圖片內(nèi)存占用;
2. 一定要避免使用大圖片,這就是.9圖很有用的原因之一;
3. 圖片的大小對內(nèi)存的影響是正比關系;
4. 本文只是簡單的告知讀者怎么計算圖片的內(nèi)存大小。
大圖: 440 * 336 ?? 小圖: 220 * 168 資源目錄: xhdpi
小圖的高寬都是大圖的1/2--小圖是原圖的1/4
界面效果:
測試設備: Coolpad ? 8676-M01 ? 5.1 ? density=2.0
測試前準備操作: 同一款設備,設置圖片前后多次調(diào)用gc直到內(nèi)存短時間內(nèi)保持穩(wěn)定不再變化
內(nèi)存使用情況: 下圖依次是 初始內(nèi)存,大圖內(nèi)存,小圖內(nèi)存
大圖占用內(nèi)存: 11.23 MB - 10.66 MB = 0.57 MB
小圖占用內(nèi)存: 10.81 MB - 10.66 MB = 0.15 MB
大圖小圖內(nèi)存關系: 0.15 MB * 4 = 0.60 MB 約等于 0.57 MB (這是統(tǒng)計工具的誤差,理論上就是相等的)
同樣的方式在另外一臺設備小米4c上得到的結(jié)果如下:
測試設備: Xiaomi ? Mi-4c ? V8.2.1.0.LXKCNDL ? 5.1.1 ? density=3.0
大圖占用內(nèi)存: 13.22 MB - 11.95 MB = 1.27 MB
小圖占用內(nèi)存: 12.27 MB - 11.95 MB = 0.32 MB
大圖小圖內(nèi)存關系: 0.32 MB * 4 = 1.28 MB 約等于 1.27 MB
結(jié)論: 由此可見大圖比小圖占用更多的內(nèi)存,圖片大?。ǚ直媛剩┡c占用內(nèi)存成正比關系
備注: 圖片在硬盤上占用的磁盤空間大小,與在內(nèi)存中占用的內(nèi)存大小完全不一樣,不是一個概念,不要混淆
根據(jù)上文中圖片大小與內(nèi)存的關系,可以更加深刻的理解Android中.9圖片的作用,它不但能減少apk的體積,還能減少圖片占用內(nèi)存。
有些時候我們根本不需要圖片,而是自己繪制背景,可以在自定義View的onDraw中繪制背景,當然最方便的還是使用系統(tǒng)的Drawable,繪制部分交給系統(tǒng)去完成。
下面測試圖片與Drawable的內(nèi)存占用對比
原始圖片大?。?482 * 482
界面效果:
測試設備: Xiaomi ? Mi-4c ? V8.2.1.0.LXKCNDL ? 5.1.1
測試前準備操作: 同一款設備,設置背景前后多次調(diào)用gc直到內(nèi)存短時間內(nèi)保持穩(wěn)定不再變化
內(nèi)存使用情況: 下圖依次是 初始內(nèi)存,使用圖片占用的內(nèi)存,使用Drawable占用的內(nèi)存,使用onDraw繪制占用的內(nèi)存
使用圖片占用內(nèi)存: 13.97 MB - 11.97 MB = 2.00 MB
使用Drawable占用內(nèi)存: 11.97 MB - 11.97 MB = 0.00 MB (不會是0,有誤差,只是很少)
使用onDraw繪制占用內(nèi)存: 11.98 MB - 11.97 MB = 0.01 MB
結(jié)論: 繪制背景,或者使用系統(tǒng)提供Drawable作為背景,會大大減少內(nèi)存占用
Drawable參考資料:
Drawable實戰(zhàn)解析:Android XML shape 標簽使用詳解(apk瘦身,減少內(nèi)存好幫手)
Android GradientDrawable(shape標簽定義)靜態(tài)使用和動態(tài)使用(圓角,漸變實現(xiàn))
“讓你的圖片最小化”一節(jié)中描述的方法:使用盡可能小的圖,使用.9,自己繪制背景或者使用Drawable來繪制背景
加載大圖片時需要對圖片進行壓縮,使用等比例壓縮方法直接在內(nèi)存中處理圖片
這樣做要注意的是,圖片質(zhì)量會變差,inSampleSize設置的值越大,圖片質(zhì)量就越差。
有時候我們?nèi)〉靡粡垐D片,也許只是為了獲得這個圖片的一些信息,比如圖片的width、height等信息,不需要顯示到界面上,這個時候我們可以不把圖片加載到內(nèi)存中。
由于Android外層是使用java,而底層使用的是C語言為圖片對象分配的內(nèi)存空間。所以我們的外部雖然看起來釋放了,但里層卻并不一定完全釋放了,我們使用完圖片后最好再釋放掉里層的內(nèi)存空間。
RGB(ARGB)
RGB色彩模式是工業(yè)界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統(tǒng)之一。在Android中還有包含透明度Alpha的顏色模型,即ARGB。
YUV
YUV,分為三個分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。
YUV的原理是把亮度與色度分離,研究證明,人眼對亮度的敏感超過色度。利用這個原理,可以把色度信息減少一點,人眼也無法查覺這一點。
主要用于電視系統(tǒng)以及模擬視頻領域,它將亮度信息(Y)與色彩信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的,這樣的設計很好地解決了彩色電視機與黑白電視的兼容問題
YUV的存儲中與RGB格式最大不同在于,RGB格式每個點的數(shù)據(jù)是連繼保存在一起的。即R,G,B是前后不間隔的保存在2-4byte空間中。而YUV的數(shù)據(jù)中為了節(jié)約空間,U,V分量空間會減小。每一個點的Y分量獨立保存,但連續(xù)幾個點的U,V分量是保存在一起的,(反正人眼一般也看不出區(qū)別).這幾個點合起來稱為macro-pixel, 這種存儲格式稱為Packed格式。另外一種存儲格式是把一幅圖像中Y,U,V分別用三個獨立的數(shù)組表示。這種模式稱為planar模式。
CMYK
??CMYK也稱作印刷色彩模式,顧名思義就是用來印刷的。印刷四分色模式是彩色印刷時采用的一種套色模式,利用色料的三原色混色原理,加上黑色油墨,共計四種顏色混合疊加,形成所謂“全彩印刷”。四種標準顏色是:
CMYK和RGB相比有一個很大的不同:RGB模式是一種發(fā)光的色彩模式,你在一間黑暗的房間內(nèi)仍然可以看見屏幕上的內(nèi)容;CMYK是一種依靠反光的色彩模式,我們是怎樣閱讀報紙的內(nèi)容呢?是由陽光或燈光照射到報紙上,再反射到我們的眼中,才看到內(nèi)容。它需要有外界光源,如果你在黑暗房間內(nèi)是無法閱讀報紙的。只要是在印刷品上看到的圖像,就是CMYK模式表現(xiàn)的。比如期刊、雜志、報紙、宣傳畫等,都是印刷出來的,那么就是CMYK模式的了。
CMYK原色與疊加之后的顏色對比
在不考慮透明度的情況下,一個像素點的顏色值在計算機中的表示方法有以下3種:
在Java中,float類型的變量占32位,int類型的變量占32位,short和char類型的變量都在16位,因此可以看出,用浮點數(shù)表示法編碼一個像素的顏色,內(nèi)存占用量是96位即12字節(jié);而用24位整數(shù)表示法編碼,只要一個int類型變量,占用4個字節(jié)(高8位空著,低24位用于表示顏色);用16位整數(shù)表示法編碼,只要一個short類型變量,占2個字節(jié);因此可以看出采用整數(shù)表示法編碼顏色值,可以大大節(jié)省內(nèi)存,當然,顏色質(zhì)量也會相對低一些。在Android中獲取Bitmap的時候一般也采用整型編碼。
回想一下Android的BitmapConfig類中,有ARGB_8888、ARGB_4444、RGB565等常量,現(xiàn)在可以知道它們分別代表了什么含義。同時也可以計算一張圖片在內(nèi)存中可能占用的大小,比如采用ARGB_8888編碼載入一張1920 1200的圖片,大概就會占用1920 1200*4/1024/1024=8.79MB的內(nèi)存。
采用低內(nèi)存占用量的編碼方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內(nèi)存;
1920 1200的圖片:*
ARGB_8888:1920 1200 4/1024/1024=8.79MB
ARGB_4444,RGB565:1920 1200 2/1024/1024=4.39MB
在Android中,對圖片的使用一定要關注,大多數(shù)情況下,占用內(nèi)存多,OOM發(fā)生都是因為圖片資源使用不當。不要盲目加一個大圖到Android項目中,能使用.9進來使用,而且.9圖本身盡可能小,另外能使用繪制實現(xiàn)就不要加一個圖片資源。有些時候,在不影響用戶體驗的情況下,可以降低圖片素材質(zhì)量,比如不需要透明度的就不要了,有些透明度用肉眼看不出來。
即 為什么要優(yōu)化圖片Bitmap資源,具體如下圖:
本文將從 以下方面優(yōu)化圖片Bitmap資源的使用 內(nèi)存管理
下面,我將詳細講解每個優(yōu)化方向的具體優(yōu)化方案
至此,關于圖片資源Bitmap的使用優(yōu)化講解完畢
當前文章:android圖片資源,圖圖資源安卓
瀏覽地址:http://m.kartarina.com/article18/dseecdp.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設計、網(wǎng)站收錄、關鍵詞優(yōu)化、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設、網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)