包含:
Android內存優化,算法優化,Android的界面優化,Android指令級優化,以及Android應用內存占用分析
兩條基本的原則:
(1)不要做不必要的事;(2)不要分配不必要的內存。
高效的代碼由兩點的來決定:
1.高效的數據結構 ;2高效的執行算法。
延遲初始化:
1、減少全局變量:只要聲明一個全局變量就會在類加載或者初始化的時候執行一條指令
2、對于開銷大的靜態模塊或者全局非靜態模塊,可以重構到另外一個類里,達到延遲初始化的作用。
3、聲明全局靜態變量,一定要加final聲明:靜態常量,編譯期常量,編譯class時就確定值;存方法區中靜態常量池;在編譯階段存入調用類的常量池中
4、延遲findviewbyid操作
5、ScheduledThreadPoolExecutor延遲耗時操作、或者handler的postdelay等方法
類、方法、變量:
1、局部變量代替全局變量
2、避免在內部調用Getters/Setters方法
3、方法變為靜態:調用速度提升15%-20%
4、避免使用枚舉:增加文件體積;
5、if、for等遍歷的條件優化
數據結構選擇:
1、ArrayList和LinkedList的選擇:
ArrayList根據index取值更快,LinkedList更占內存、隨機插入刪除更快速、擴容效率更高。一般推薦ArrayList。
2、ArrayList、HashMap、LinkedHashMap、HashSet的選擇:
hash系列數據結構查詢速度更優,ArrayList存儲有序元素,HashMap為鍵值對數據結構,LinkedHashMap可以記住加入次序的hashMap,HashSet不允許重復元素。
3、HashMap、WeakHashMap選擇:
WeakHashMap中元素可在適當時候被系統垃圾回收器自動回收,所以適合在內存緊張型中使用。
4、Collections.synchronizedMap和ConcurrentHashMap的選擇:
ConcurrentHashMap為細分鎖,鎖粒度更小,內部有reentrantlock實現,并發性能更優。Collections.synchronizedMap為對象鎖,自己添加函數進行鎖控制更方便。
5、Android也提供了一些性能更優的數據類型,如SparseArray、SparseBooleanArray、SparseIntArray、ArrayMap替代HashMap。
Sparse系列的數據結構是為key為int情況的特殊處理,采用二分查找及簡單的數組存儲,加上不需要泛型轉換的開銷,相對Map來說性能更優。
對象生成
1、避免創建對象:StringBuffer string
2、基本數據類型來代替封裝數據類型 int integer
3、增強型for循環,arraylist iterator對象
舉例:
https://blog.csdn.net/litton_van/article/details/21702299
https://blog.csdn.net/litton_van/article/details/21872677
基本規范:
https://blog.csdn.net/litton_van/article/details/21956859