編輯:Android資訊
關於Android性能優化中一個常見的建議是不要在你的代碼中使用Enums,就連 Android官網 上都強烈建議不要使用。
Android中當你的App啟動後系統會給App單獨分配一塊內存。App的DEX code、Heap以及運行時的內存分配都會在這塊內存中。接下來看兩種寫法:
1.使用Int表示狀態
public static final int VALUE1 =1; public static final int VALUE1 =2; public static final int VALUE1 =3;
2.使用Enums表示狀態
public static enum Value{ VALUE1, VALUE2, VALUE3 }
情形2中的DEX size增加是情形1中的13倍之多。這還只是DEX code的增加,同樣,運行時的內存分配,一個enum值的聲明會消耗至少20 bytes,這還不算其中的對象數組需要保持對enum值的引用。Why?使用javap反編譯情形二中生成的class文件,去掉匯編代碼後如下:
public final class VALUE extends java.lang.Enum{ public static final VALUE VALUE1; public static final VALUE VALUE2; public static final VALUE VALUE3; private static final VALUE[] values[]; static{} }
可以看到實際上enum類型繼承java.lang.Enum,每個枚舉項都會被聲明成一個靜態變量,並被賦值。VALUE value1 = VALUE.VALUE1則會引起對靜態變量的引用。
因 此,當你的代碼或包含的Lib中大量使用enums時,對於本身內存小的手機將是災難性的。不可否認enums會使得代碼更易讀更安全,但是我們使用 Int也可以通過@IntDef 注解防止編譯時Lint errors。當然如果你使用enums,proguard在一些情況下會優化你的代碼使用Int代替。
在Android的輸入框中加入清除按鈕,是很常見的設計,本文介紹如何創建一個控件,在輸入框中加入清除按鈕。 我們來看看實現這個控件都需要做什麼: 清除按鈕在輸
一、萌芽 作為一只編程經驗並不怎麼豐富的程序猿來講,我一直覺得架構師是一個比較神秘的職業,架構設計就更加的高大上了。經過今年的幾個項目,之前曾發文敘述我的從MVC
當你在開發一個app,通常你會有幾個版本。大多數情況是你需要一個開發版本,用來測試app和弄清它的質量,然後還需要一個生產版本。這些版本通常有不同的設置,例如不同
為了創建一個選項卡的UI,你需要使用一個TabHost和一個TabWidget,TabHost必須是布局文件的根節點,它包含了為了顯示選項卡的TabWidget和