Android應用程式記憶體最佳化

來源:互聯網
上載者:User

      在開發Android App的過程中,經常會遇到記憶體方面的壓力,比如OOM,或者頻繁GC。

      本文不打算涵蓋記憶體最佳化的所有方面,只是介紹一下我自己遇到的問題和解決方案。

      1.確定頻繁分配記憶體的代碼路徑。

         一般來說,頻繁分配記憶體的路徑可能會是繪製(draw)相關的方法,排版(layout)相關的方法,某些回調方法(特別是感應器回調方法)。

         你可能會檢查這部分代碼,然後最佳化它。但是,記憶體配置可能發生在調用鏈的更下面,檢查代碼非常困難。

         這裡推薦一個工具,DDMS下的Allocation Tracker。它可以顯示出程式運行中頻繁分配記憶體的部分,並準確定位到對應的代碼。

      2.減少頻繁的記憶體配置。

         雖然Java是自動回收記憶體的,但是頻繁的記憶體配置肯定會增加GC方面的壓力,導致程式運行不流暢。

         減少頻繁地建立對象或者不在這些地方建立對象是一個顯而易見的方法。

         但是,也有一些比較隱秘的記憶體消耗點,下面就介紹一下for迴圈的記憶體消耗。

         我們知道,在Java中,for迴圈有兩種寫法:

List<String> list = new ArrayList<String>();// 寫法一for(int i = 0; i < list.size(); i++) {      String s = list.get(i);      ......}// 寫法二for(String s : list) {      ......}

         寫法二是Java推薦的方法,但是它卻需要分配一個迭代器對象。如果是放在onDraw這樣的方法中,那麼每次調用就需要分配一小塊記憶體。

         所以,我推薦在onDraw這樣的方法中,使用方法一。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.