標籤:android 效能最佳化 android開發
在Android開發過程中,很多時候往往因為代碼的不規範、api使用不恰當、控制項的使用情境考慮不全面和使用者不恰當的操作等都能引發一系列效能問題的,下面就是我目前整理的一些Android開發過程中需要注意的細節,正所謂一顆老鼠屎可以壞了一鍋粥,細節決定成敗
下面就是一些效能最佳化的方案:
1、Android中別使用enum,使用static final 代替枚舉enum,因為使用enum比使用static需要消耗更多的記憶體空間
2、Toast中使用getApplicationContext()來代替當前Activity的Context,如Toast.makeText(getApplicationContext(),"",Toast.LENGTH_SHORT).show();
因為如果使用當前Activity的Context,當使用者操作不當時,比如在Toast顯示時候按了返回鍵,而此時Toast又持有當前Activity的Context引用,所以導致記憶體流失
3、Android開發中合理的使用static,因為static的生命和應用的生命一樣長,如果該變數可以的話則不要用static修飾,讓它和Actiity保持一樣的生命週期或者和方法保持一樣的生命週期
4、關於網路請求,如果使用的非常頻繁則會對使用者手機的電量和流量造成比較大的損耗,正所謂應用的開發應把使用者體驗放在第一位,所以在網路請求方面,應盡量遵循這兩個原則:
1、減少移動網路被啟用的時間與次數(保證應用功能正常使用的前提下)
2、對一些與使用者互動的比較大的資料(圖片、檔案等),可以對這些資料進行壓縮
5、防止記憶體抖動,所謂記憶體抖動就是在短時間內建立出大量的對象,從而造成記憶體緊張,進而觸發GC回收,因為執行GC的回收的時候,所有的線程都會暫停,包括主線程,只有等待GC回收完成後其它操作才能繼續進行,通常情況下GC回收的效率是非常高效的,但是如果記憶體上發生大量記憶體抖動,那麼將會導致GC的回收效率降低。所以記憶體抖動很可能會造成介面卡頓。
防止記憶體抖動:
1、可以使用對象池來管理對象,減少對象建立的次數,在使用完成之後再手動釋放對象池中的對象
2、不要在for、while等迴圈體中執行對象的建立
3、避免在onDraw()方法中執行對象的建立
4、採用預分配策略來減少一次性建立大量的資料
預分配:就是在程式剛啟動的時候就事先建立一些即將要使用到的資料,這樣可以在需要使用到這些資料的時候提供更快的載入速度,這種行為就叫做預分配
6、針對自訂View,我們在
- 我們知道調用View.invalidate()會觸發View的重繪,有兩個原則需要遵守:
1、僅僅在View的內容發生改變的時候才去觸發invalidate方法
2、盡量使用ClipRect等方法來提高繪製的效能
- 減少繪製時不必要的繪製元素,對於那些不可見的元素,我們需要盡量避免重繪
- 不要在onDraw()方法中執行記憶體配置的操作,如:不要在onDraw()方法中執行Paint mPaint = new Paint();等操作
- 對於不在螢幕上的元素,可以使用Canvas.quickReject把他們給剔除,避免浪費CPU資源。另外盡量使用GPU來進行UI的渲染,這樣能夠極大的提高程式的整體表現效能
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。轉載註明出處:http://blog.csdn.net/u010687392
Android效能最佳化典例(一)