天天看點

Android性能優化的一些方案

手機或平闆受到硬體缺陷,在應用越裝越多,或者使用一段時間後,使用者會感覺性能能不佳,或者我們開發的App時程式優化不好,造成使用者體驗不好,例如卡頻,遲緩等,我們應該注意Android的性能優化。接下來,将從四個方面分析一下優化方案。

一、優化Dalvik虛拟機的堆記憶體配置設定 1 )記憶體方面,可以參考 Android 堆記憶體也可自己定義大小和優化Dalvik 虛拟機的堆記憶體配置設定 對于Android 平台來說,其托管層使用的Dalvik JavaVM 從目前的表現來看還有很多地方可以優化處理,比如我們在開發一些大型遊戲或耗資源的應用中可能考慮手動幹涉GC 處理,使用 dalvik.system.VMRuntime 類提供的setTargetHeapUtilization 方法可以增強程式堆記憶體的處理效率。當然具體原理我們可以參考開源工程,這裡我們僅說下使用方法: private final static float TARGET_HEAP_UTILIZATION = 0.75f; 在程式onCreate 時就可以調用: VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 2 )Android 堆記憶體也可自己定義大小 對于一些大型Android 項目或遊戲來說在算法處理上沒有問題外,影響性能瓶頸的主要是Android 自己記憶體管理機制問題,目前手機廠商對RAM 都比較吝啬,對于軟體的流暢性來說RAM 對性能的影響十分敏感。 除了上面 提到的優化Dalvik 虛拟機的堆記憶體配置設定外,我們還可以強制定義自己軟體的對記憶體大小,我們使用Dalvik 提供的dalvik.system.VMRuntime 類來設定最小堆記憶體為例: private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ; VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); // 設定最小 heap 記憶體為 6MB 大小 當然對于記憶體吃緊來說還可以通過手動幹涉GC 去處理,我們将在下面提到具體應用。

二、基礎類型上,因為 Java沒有實際的指針,在敏感運算方面還是要借助NDK來完成。 Android123 提示遊戲開發者,這點比較有意思的是Google 推出NDK 可能是幫助遊戲開發人員,比如OpenGL ES 的支援有明顯的改觀,本地代碼操作圖形界面是很必要的。

三 、圖形對象優化: 這裡要說的是Android 上的Bitmap 對象銷毀,可以借助recycle() 方法顯示讓GC 回收一個Bitmap 對象,通常對一個不用的Bitmap 可以使用下面的方式,如 if(bitmapObject.isRecycled()==false) // 如果沒有回收                 bitmapObject.recycle();   

當然圖檔這方面是個大問題,一張圖檔要展示到手機上問題不大,但是如果是很多圖檔,并且源自伺服器,必須使用三級緩存,一是提升使用者體驗,二是減少不必要的網絡通路,本地有緩存,并且緩存有效,先讀緩存,防止網絡通路壓力大。這個很多開源架構都做的不錯。此外就是技巧了,如果是滑動的ListView展示圖檔,可以在滾動的時候不加載圖檔,停止滾動再加載,分頁加載等,可以參照我的另一篇部落格,ListView的優化。

四、處理GIF動畫: 目前系統對動畫支援比較弱智對于正常應用的補間過渡效果可以,但是對于遊戲而言一般的美工可能習慣了GIF 方式的統一處理 目前Android 系統僅能預覽GIF 的第一幀,可以借助J2ME 中通過線程和自己寫解析器的方式來讀取GIF89 格式的資源。 五、 誤操作問題的降噪處理 :

對于大多數Android 手機沒有過多的實體按鍵可能我們需要想象下了做好手勢識别 GestureDetector 和重力感應來實作操控。這時候通常我們要考慮誤操作問題的降噪處理,充分考慮到各種情況。

這個部落格隻是為大家提供了一個思路,具體的做法要靠大家自己實作了。