為什麼 Android 中不建議使用 Enums
關於Android效能優化中一個常見的建議是不要在你的程式碼中使用Enums,就連 Android官網 上都強烈建議不要使用。
Why
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代替。
相關文章
- 為什麼不建議使用gotoGo
- 為什麼不建議使用eval和with?
- Spring中為什麼不建議使用欄位注入Spring
- 為什麼不建議使用免費的IP代理?
- 為什麼不建議在 MySQL 中使用 UTF-8?MySql
- 為什麼不建議使用自定義Object作為HashMap的key?ObjectHashMap
- Java面試題:為什麼HashMap不建議使用物件作為Key?Java面試題HashMap物件
- Oracle RAC - Oracle為什麼不建議使用交叉線作為心跳線Oracle
- 為什麼不建議在for迴圈中使用"+"進行字串拼接字串
- 為什麼阿里巴巴不建議MySQL使用Text型別?阿里MySql型別
- 為什麼不建議函式有太多引數?函式
- 為什麼idea建議使用“+”拼接字串Idea字串
- 為什麼建議使用命令列工具?命令列
- 為什麼判斷物件是否相等, 不建議用 equals ?物件
- 談一談全棧,為什麼不建議初學者去做全棧
- 2024年 為什麼不建議新人學習ABAP
- 為什麼不再建議使用GOPATH以及如何使用Go ModulesGo
- 為什麼建議將安全性構建到系統中?
- 為什麼我不建議你通過 Python 去找工作?Python
- 為什麼不建議把資料庫部署在docker容器內?資料庫Docker
- 為什麼阿里巴巴不建議在for迴圈中使用"+"進行字串拼接阿里字串
- 為什麼阿里巴巴不建議在for迴圈中使用”+”進行字串拼接阿里字串
- 入行IT,為什麼建議你學Java?Java
- 為什麼現在連Date類都不建議使用了?
- 知乎萬贊:為什麼我不建議你轉行學python?Python
- 為什麼不建議給MySQL設定Null值?《死磕MySQL系列 十八》MySqlNull
- 為什麼建議一個容器中只執行一個程式
- Android 中 EventBus 的使用(1):為什麼要使用 EventBusAndroid
- 為什麼不建議在非同步階段注入 Vue 3.0 的生命週期非同步Vue
- 為什麼建議你常閱讀原始碼?原始碼
- 為什麼不建議你用 MongoDB 這類產品替代時序資料庫?MongoDB資料庫
- 為什麼java不推薦使用vectorJava
- 為什麼我牆裂建議大家使用列舉來實現單例。單例
- C++中為什麼要用指標,而不直接使用物件?C++指標物件
- 為什麼 JakeWharton 建議:App 只要用到一個 Activity ?APP
- 程式語言這麼多,為什麼建議選擇Python?Python
- SQL語句為什麼不會共享(中)SQL
- win10千萬別裝騰訊電腦管家 為什麼不建議裝騰訊電腦管家Win10