Android Performance Best Practices from Amgad Muhammad
這幾天在看 Android Performance Patterns 相關文章時看到這份投影片,裡面提到的有些東西我以前沒用過,就來寫摘要記錄一下。
如何有效運用資源:
這幾天在看 Android Performance Patterns 相關文章時看到這份投影片,裡面提到的有些東西我以前沒用過,就來寫摘要記錄一下。
如何有效運用資源:
- 謹慎使用 service
- 利用 IntentService 可以確保任務執行完後會結束,藉此限制它的生命週期。
- 若 app 結束或不需要 service 資源時,務必釋放掉避免佔用。
- 當 UI 退場或是 memory 吃緊時,都可以利用 onTrimMemory() (API level 14 以上) 提供的 callback 得知是否需要釋放資源。
- 透過 getMemoryClass() 得知這台 device 可以用的 heap memory,超過便會造成 OOM;另外在 manifest<application> 中設定 largeHeap 為 true 的話,可以得到更多的 heap memory,此時若想得知可以用的 heap memory,需要改用 getLargeMemoryClass()。由於資源有限,若非必要,還是盡量避免使用 largeHeap。
- 小心引用 bitmap,並且確實回收避免資源浪費。
- 適當情況下可以利用 SparseArray 取代 Hashmap 改善資源運用。
- 注意 memory 基本用量
- 不要使用 enums,因為它會需要比 static 更多的資源。
- 每個 class 使用約 500 bytes。
- 每個 class 的 instance 約有 12~16 bytes。
- 每放一個項目到 Hashmap,便需要額外配置一個項目物件,佔用 32bytes。
- 小心使用抽象類別或方法,因為它同樣會需要 memory,如果它不能帶來明顯優勢,那應該避免使用。
- 小心使用第三方 library。
- 利用 ProGuard 精簡並混淆程式碼,減少資源需求。
Performance tips:
- 避免宣告無謂的物件,或是短暫使用的物件。
- 如果只需要調用物件內的方法,而不需要物件本身,可以設定方法為 static。
- 對於固定變數,使用 static final。
- 避免使用 getters 和 setters,因為同樣耗費調用成本,除非是在 public interface 裡使用;若是在 class,應該直接調用其變數。
- 使用 enhanced for-loop 語法會比傳統 counted loop 效率好非常多。
- 避免使用浮點數。
沒有留言:
張貼留言