色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Android高效內存:讓圖片占用盡可能少的內存

Dbwd_Imgtec ? 來源:未知 ? 作者:胡薇 ? 2018-06-02 11:05 ? 次閱讀

在做內存優化的時候,我們發現除了解決內存泄露問題,剩下的就只有想辦法減少真實的內存占用。而在App中,大部分內存可能被我們圖片占用了,所以減少圖片的內存占用可以帶來直接的效果。

一、一張圖片到底占用多少內存

我們先假設我們有一張圖片是600 * 800像素的,圖片磁盤占用空間大小假設是 100KB。

圖片內存大小跟磁盤占用空間大小有什么關系?

磁盤占用空間的大小不是圖片占用內存的大小,磁盤占用空間是在磁盤上存儲圖片需要的一個空間大小,內存大小是加載到內存中占用的內存大小。兩個只是單位是一樣的,本質不是一個概念。

一張圖片到底占用多少內存呢?

圖片占用內存的計算公式是:圖片高度 * 圖片寬度 * 一個像素占用的內存大小,在Android中一般情況下默認一個像素占用內存是4個字節,所以上面的圖片占用內存是:800 * 600 * 4 byte = 1875KB = 1.83M。為什么是4個字節呢?一定是4個字節么?這兩個問題后面仔細講。

圖片所在目錄對內存的影響?

在Android中,圖片的存放目錄和手機的屏幕密度影響圖片最終加載到內存的實際大小,舉個例子:假設我們的圖片放到xhdpi目錄下,那么我們本文中的圖片占用的內存大小如下:

屏幕密度為2的設備:800 * 600 * 4byte = 1.83M

屏幕密度為3的設備:800 * 1.5 * 600 * 1.5 * 4byte = 1.83 * 2.25M = 4.12M

這里所說的屏幕密度是指android.util.DisplayMetrics類中的density變量,是一個float值,關于屏幕密度的更多內容本文不做介紹。

所以,計算圖片占用內存大小的時候,要考慮圖片所在的目錄跟屏幕密度,這兩個因素其實影響的是圖片的高寬,Android會對圖片進行拉升跟壓縮。

二、 讓你的圖片省內存

2.1 讓你的圖片最小化

圖片的內存占用計算方式為:圖片高度 * 圖片寬度 * 一個像素占用的內存大小,所以圖片的高寬如果都變為原來寬高的2倍,那么內存將變為原來的4倍。所以圖片的使用原則可以總結如下:

使用盡可能小的圖

使用.9圖,.9圖本身也要盡可能的小

自己繪制(覆寫View的onDraw自己畫)或者使用Drawable來繪制

比如要實現一個線性漸變效果可以采用以下drawable實現:

2.2 在內存中壓縮圖片

加載大圖片時需要對圖片進行壓縮,使用等比例壓縮方法直接在內存中處理圖片。

這樣做要注意的是,圖片質量會變差,inSampleSize設置的值越大,圖片質量就越差。

2.3 讀取位圖尺寸和類型時不把圖片加載到內存中

有時候我們取得一張圖片,也許只是為了獲得這個圖片的一些信息,比如圖片的width、height等信息,不需要顯示到界面上,這個時候我們可以不把圖片加載到內存中。

2.4 用完就回收

由于Android外層是使用java,而底層使用的是C語言為圖片對象分配的內存空間。所以我們的外部雖然看起來釋放了,但里層卻并不一定完全釋放了,我們使用完圖片后最好再釋放掉里層的內存空間。

2.5 降低要顯示的圖片色彩質量

2.5.1 顏色模型

RGB(ARGB)

RGB色彩模式是工業界的一種顏色標準,是通過對紅(R)、綠(G)、藍(B)三個顏色通道的變化以及它們相互之間的疊加來得到各式各樣的顏色的,RGB即是代表紅、綠、藍三個通道的顏色,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之一。在Android中還有包含透明度Alpha的顏色模型,即ARGB。

2.5.2 RGB在計算機中顏色值的數字化編碼

在不考慮透明度的情況下,一個像素點的顏色值在計算機中的表示方法有以下3種:

浮點數編碼:比如float: (1.0, 0.5, 0.75),每個顏色分量各占1個float字段,其中1.0表示該分量的值為全紅或全綠或全藍。

24位的整數編碼:比如24-bit:(255, 128, 196),每個顏色分量各占8位,取值范圍0-255,其中255表示該分量的值為全紅或全綠或全藍。

16位的整數編碼:比如16-bit:(31, 45, 31),第1和第3個顏色分量各占5位,取值范圍0-31,第2個顏色分量占6位,取值范圍0-63。

在Java中,float類型的變量占32位,int類型的變量占32位,short和char類型的變量都在16位,因此可以看出,用浮點數表示法編碼一個像素的顏色,內存占用量是96位即12字節;而用24位整數表示法編碼,只要一個int類型變量,占用4個字節(高8位空著,低24位用于表示顏色);用16位整數表示法編碼,只要一個short類型變量,占2個字節;因此可以看出采用整數表示法編碼顏色值,可以大大節省內存,當然,顏色質量也會相對低一些。在Android中獲取Bitmap的時候一般也采用整型編碼。

2.5.3 Android中RGB編碼格式(整型編碼)

RGB888(int):R、G、B分量各占8位

RGB565(short):R、G、B分量分別占5、6、5位

RGB555(short):RGB分量都用5位表示(剩下的1位不用)

ARGB8888(int):A、R、G、B分量各占8位

ARGB4444(short):A、R、G、B分量各占4位

在Android的Bitmap.Config類中,有ARGB_8888、ARGB_4444、RGB565等常量,現在可以知道它們分別代表了什么含義。

在Android中系統默認使用的編碼格式是ARGB_8888,所以在文章開頭計算圖片內存大小的時候每個像素占用內存大小是4byte,比如采用ARGB_8888編碼載入一張1920*1200的圖片,大概就會占用1920*1200*4/1024/1024=8.79MB的內存。

2.5.4 降低要顯示的圖片色彩質量

采用低內存占用量的編碼方式,比如Bitmap.Config.ARGB_4444比Bitmap.Config.ARGB_8888更省內存,比如1920*1200的圖片。

ARGB_8888:1920*1200*4/1024/1024=8.79MB

ARGB_4444,RGB565:1920*1200*2/1024/1024=4.39MB

三、總結

在Android中,對圖片的使用一定要關注,大多數情況下,占用內存多,OOM發生都是因為圖片資源使用不當。不要盲目加一個大圖到Android項目中,能使用.9進來使用,而且.9圖本身盡可能小,另外能使用繪制實現就不要加一個圖片資源。有些時候,在不影響用戶體驗的情況下,可以降低圖片色彩質量,比如不需要透明度的就不要了,有些透明度用肉眼看不出來。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3935

    瀏覽量

    127348
  • 內存
    +關注

    關注

    8

    文章

    3019

    瀏覽量

    74007

原文標題:Android高效內存之讓你的圖片省內存

文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    內存管理學習筆記分享

    物理內存分配設計有兩個重要的評價維度。一方面,物理內存分配器要追求更高的內存資源利用率,即盡可能減少資源浪費。另一方面,物理內存分配器要追求
    的頭像 發表于 01-06 14:53 ?1706次閱讀

    Linux內核內存規整總結

    1.前言 伙伴系統作為內核最基礎的物理頁內存分配器,具有高效、實現邏輯簡介等優點,其原理頁也盡可能降低內存外部碎片產生,但依然無法杜絕碎片問題。外部碎片帶來的最大影響就是
    的頭像 發表于 11-11 11:17 ?1313次閱讀
    Linux內核<b class='flag-5'>內存</b>規整總結

    五大方法內存使用更高效

    、文件或窗口。有些應用程序不能用一般的方法關閉,這時就要進行熱啟動,如按下“CTRL+ALT+DEL”;另外要注意剪貼板中如果存儲了一幅圖片或圖像,圖片或圖像是要占用大量內存的,這時只
    發表于 01-02 23:46

    labview的內存問題

    如圖所示為,圖像處理一個圖像的過程,按照道理這種圖片的大小為43.3MB,可是觀察VI運行時候的內存占用大小,如果沒有VI運行至最后,那么vi占用
    發表于 09-18 21:20

    如何確保盡可能高效地測試開關穩壓器?

    問題:如何確保盡可能高效地測試開關穩壓器?
    發表于 03-01 08:50

    緩沖VDAC輸出損失如何盡可能的減少?

    ,但是連接后電壓不會下降到1.9V以下。JRK直接從電位器工作。我想在PSoC和控制器之間放置一個運放來緩沖這個,但是我想盡可能的損失,盡可能地保持輸出的精確性。我需要一個DIL包,這樣我就可以剝離
    發表于 10-08 12:43

    解碼會占用多少內存?使用vpp進行圖像處理最大可能會消耗多少內存

    解碼會占用多少內存?使用vpp進行圖像處理,最大可能會消耗多少內存
    發表于 09-19 07:24

    DDR內存接口的設計與實現

    針對當今電子系統對高速大容量內存的需要,本文闡述了使用DDR 控制器IP 核來設計實現DDR內存接口的方法。該方法能使設計盡可能簡單,設計者更專注于關鍵邏輯設計,以便達到
    發表于 08-11 09:42 ?21次下載

    Android應用程序內存泄漏的原因及規避方法

    引言 Android應用程序中內存使用的問題經常容易被忽視,在傳統的編程語言中(例如C語言),回收內存的任務是由程序本身來完成的,程序可以顯式分配和釋放變量所占用
    發表于 10-19 14:52 ?0次下載
    <b class='flag-5'>Android</b>應用程序<b class='flag-5'>內存</b>泄漏的原因及規避方法

    基于Android系統的高效內存方法解析

    在做內存優化的時候,我們發現除了解決內存泄露問題,剩下的就只有想辦法減少真實的內存占用。而在App中,大部分內存
    發表于 06-05 20:23 ?1165次閱讀

    設計全定制ASIC以占用盡可能多的硅面積變得越來越具有挑戰性

    “設計重用”是將高質量知識產權(IP)從一種ASIC設計遷移到另一種ASIC設計的過程。隨著半導體技術的巨大進步,越來越難以彌合技術提供與硅生產率允許之間的生產率差距。設計全定制ASIC以占用盡可能
    的頭像 發表于 08-13 17:02 ?1842次閱讀

    Java服務器內存和CPU占用過高的原因

    造成服務器內存占用過高只有兩種情況:內存溢出或內存泄漏
    的頭像 發表于 03-21 15:50 ?2.2w次閱讀

    電腦內存占用過高加內存條起作用嗎

    電腦內存占用過高加內存條有用。內存容量小是內容占用過高的其中一個原因,所以加內存條可以解決問題;
    發表于 06-16 10:25 ?6662次閱讀

    更低內存占用的通用Json庫-RyanJson

    RyanJson是一個小巧的c語言json解析器,包含json文本文件解析 / 生成,專門針對內存占用進行優化,相比cJSON內存占用減少30% - 60%,運行速度和cJSON差不多
    的頭像 發表于 08-24 17:23 ?1670次閱讀
    更低<b class='flag-5'>內存</b><b class='flag-5'>占用</b>的通用Json庫-RyanJson

    Windows不明內存占用案例分析:Driver Locked

    前一段有客戶反映Windows系統下不明內存占用越來越多,128GB物理內存的主機,啟動完成后就有大約一半的內存占用,導致留給應用的
    的頭像 發表于 09-25 14:49 ?1923次閱讀
    Windows不明<b class='flag-5'>內存</b><b class='flag-5'>占用</b>案例分析:Driver Locked
    主站蜘蛛池模板: 久久久无码精品无码国产人妻丝瓜| 在线播放成人无码日| 祺鑫WRITEAS流出来了| 四川老师边上网课边被啪视频| 亚洲天码中字| YELLOW在线观看高清视频免费| 国产精品三级在线观看| 麻豆XXXX乱女少妇精品| 色欲AV精品人妻一区二区三区| 一本之道高清在线观看一区| writeas雷狮直播| 好男人的视频在线观看| 亲嘴扒胸摸屁股视频免费网站| 亚洲精品无码AAAAAA片| 99久久免费精品国产| 任你躁国语自产二区在线播放| 亚洲午夜久久久精品影院| 成人天堂婷婷青青视频在线观看| 精品亚洲一区二区在线播放| 日本午夜福利无码高清| 在线观看免费视频播放视频| 国产精品免费一区二区三区四区 | 午夜福利试看120秒体验区| 2020精品国产视| 国产偷国产偷亚州清高| 欧美久久综合网| 渔夫床满艳史bd高清在线直播| 国产99对白在线播放| 免费无码国产欧美久久18| 亚洲精品国产自在在线观看| 苍井空教师BD在线观看全集| 李亚男三级| 亚洲精品色情APP在线下载观看 | 爱情岛论坛网亚洲品质| 久久受www免费人成_看片中文| 我的漂亮朋友在线观看全集免费| freehd另类xxxx喷水| 久热在线这里只有精品7| 亚洲精品视频久久| 国产精品VIDEOS麻豆TUBE| 琪琪色在线播放|