Android開發(fā)技巧(一):用xml drawable替代png

原文:Android dev tip: Replace PNG assets with XML drawables

譯者注:我個人在開發(fā)中還是比較喜歡用xml drawable的方式來替代一些可以被替代的圖片 职恳,看的n多圖片就鬧心部凑。

Android開發(fā)中解決OutOfMemoryException問題最好方法是永遠不要產(chǎn)生它們,所以限制app使用內存是非常重要的煮纵。有時候這意味要涉及到設計師胖腾。讓我用一個案例來解釋為什么呢采呐。低淡。旧蛾。

button

你的設計師給了你一個png像上面的設計

小事一件张遭,就是300*100dp的圖片邓萨。然后放進界面中,運行app菊卷,一切都正常運行缔恳,直到你查看Android Studio的內存監(jiān)視器Memory Monitor然后注意到你的內存飆升了大概1MB.

mem jump

發(fā)生了什么?

finder small

你看一下你剛才添加的png,只有10kb,心想:應該不是它引起的吧洁闰?不褐耳,就是它。你在文件夾里面看到是壓縮的圖片文件渴庆,但是Android加載它的時候已經(jīng)不是壓縮文件了铃芦。它會渲染你的png成Bitmap,它以非壓縮的方式存儲圖片雅镊。就是每個像素顏色的一個大矩陣。默認刃滓,Android用ARGB_8888格式就是每個像素4個字節(jié)來處理仁烹。是的,現(xiàn)在看看XXHDPI文件夾咧虎,我們的300dp事實上是900像素卓缰,這意味的我們的“小圖片” 900*300轉換成Bitmap時用了1080000字節(jié)(1.03MB)

mem byte

好吧,非常糟糕

那么現(xiàn)在擺在眼前的是:1MB快要讓你的app內存溢出了砰诵,然后你要告訴你的設計師說你們這群渣渣征唬,快要弄死我的APP了?(不要這樣做,容易干架)

有一個更好的方式實現(xiàn)這個按鈕界面茁彭,那就是用XML Drawable和一個Button

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"
    >
    <corners android:radius="10dp" />
    <solid android:color="#FFFFFF" />
    <stroke
        android:color="#000000"
        android:width="5dp"
        />
</shape>

<Button
        android:layout_width="300dp"
        android:layout_height="100dp"
        android:layout_gravity="center_horizontal"
        android:background="@drawable/button_xml"
        android:text="I'm A Button!"
        android:textSize="24sp"
        android:textAllCaps="false"
        />

讓我們再來看一下占用內存

xml jump
xml jump

XML drawable只用了504字節(jié)內存总寒。太好了

最后總結

顯然,并不是每個文件都可以用這種方式替代的理肺,一旦遇到一些基本的形狀最好用xml替代它摄闸。這樣當你面對不可避免的會OutOfMemoryException,你起碼延遲了出現(xiàn)的時間妹萨。

not today
not today
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末年枕,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子乎完,更是在濱河造成了極大的恐慌熏兄,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件树姨,死亡現(xiàn)場離奇詭異霍弹,居然都是意外死亡,警方通過查閱死者的電腦和手機娃弓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來岛宦,“玉大人台丛,你說我怎么就攤上這事±危” “怎么了挽霉?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長变汪。 經(jīng)常有香客問我侠坎,道長,這世上最難降的妖魔是什么裙盾? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任实胸,我火速辦了婚禮他嫡,結果婚禮上,老公的妹妹穿的比我還像新娘庐完。我一直安慰自己钢属,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布门躯。 她就那樣靜靜地躺著淆党,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讶凉。 梳的紋絲不亂的頭發(fā)上染乌,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音懂讯,去河邊找鬼荷憋。 笑死,一個胖子當著我的面吹牛域醇,可吹牛的內容都是我干的台谊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼譬挚,長吁一口氣:“原來是場噩夢啊……” “哼锅铅!你這毒婦竟也來了?” 一聲冷哼從身側響起减宣,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤盐须,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后漆腌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贼邓,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年闷尿,在試婚紗的時候發(fā)現(xiàn)自己被綠了塑径。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡填具,死狀恐怖统舀,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情劳景,我是刑警寧澤誉简,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站盟广,受9級特大地震影響闷串,放射性物質發(fā)生泄漏。R本人自食惡果不足惜筋量,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一烹吵、第九天 我趴在偏房一處隱蔽的房頂上張望碉熄。 院中可真熱鬧,春花似錦年叮、人聲如沸具被。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽一姿。三九已至,卻和暖如春跃惫,著一層夾襖步出監(jiān)牢的瞬間叮叹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工爆存, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛉顽,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓先较,卻偏偏與公主長得像携冤,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子闲勺,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,116評論 25 707
  • 這是一篇對《靈魂擺渡》劇集的影評曾棕。 就像標題所寫,這部劇集就是借鬼神之名調侃人生百態(tài)菜循。 值得關注的是劇集的立意翘地,而...
    卷柏楊閱讀 552評論 4 4
  • 秘笈:雄安強勢回歸 市場跌宕起伏 如何把控市場的大底信號 首先在這個位置,我們都知道市場現(xiàn)在已經(jīng)開始有所企穩(wěn)癌幕,雖然...
    無丶醉心閱讀 294評論 0 0
  • 談起寫作衙耕,每天都有想寫的沖動,每次拿起筆又放下勺远,有時候寫一段發(fā)現(xiàn)自己寫的水平很差橙喘,寫過看過就刪了。 為了提高自己的...
    小太陽的碎碎念閱讀 188評論 0 0
  • 文\孝雨澤 面對它胶逢,酷 聽到它厅瞎,刺 觸摸它,冷 感到它宪塔,戰(zhàn) 面對我聽到觸動時的感覺是葉 酷對我刺到冷凍時的戰(zhàn)無暖冬。
    曦澤教育閱讀 194評論 0 1