天天看點

Android性能優化:這是一份全面&詳細的記憶體優化指南Android性能優化:這是一份全面&詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 & 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

在 <code>Android</code>開發中,性能優化政策十分重要

本文主要講解性能優化中的記憶體優化,希望你們會喜歡

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

優化處理 應用程式的記憶體使用、空間占用

避免因不正确使用記憶體 &amp; 缺乏管理,進而出現 記憶體洩露<code>(ML)</code>、記憶體溢出<code>(OOM)</code>、記憶體空間占用過大 等問題,最終導緻應用程式崩潰(<code>Crash</code>)

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

下面,将針對回收 程序、對象 、變量的記憶體配置設定 &amp; 回收進行詳細講解

由 <code>ActivityManagerService</code> 集中管理 所有程序的記憶體配置設定

步驟1:<code>Application Framework</code> 決定回收的程序類型

Android中的程序 是托管的;當程序空間緊張時,會 按程序優先級低-&gt;&gt;高的順序 自動回收程序

Android将程序分為5個優先等級,具體如下:
Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

步驟2:<code>Linux</code> 核心真正回收具體程序

<code>ActivityManagerService</code> 對 所有程序進行評分(評分存放在變量<code>adj</code>中)

更新評分到<code>Linux</code> 核心

由<code>Linux</code> 核心完成真正的記憶體回收

此處僅總結流程,這其中的過程複雜,有興趣的讀者可研究系統源碼<code>ActivityManagerService.java</code>

<code>Android</code>的對于對象、變量的記憶體政策同 <code>Java</code>

記憶體管理 = 對象 / 變量的記憶體配置設定 + 記憶體釋放

下面,将詳細講解記憶體配置設定 &amp; 記憶體釋放政策

對象 / 變量的記憶體配置設定 由程式自動 負責

共有3種:靜态配置設定、棧式配置設定、 &amp; 堆式配置設定,分别面向靜态變量、局部變量 &amp; 對象執行個體

具體介紹如下

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

注:用1個執行個體講解 記憶體配置設定

對象 / 變量的記憶體釋放 由<code>Java</code>垃圾回收器(<code>GC</code>) / 幀棧 負責

此處主要講解對象配置設定(即堆式配置設定)的記憶體釋放政策 = <code>Java</code>垃圾回收器(<code>GC</code>)

由于靜态配置設定不需釋放、棧式配置設定僅 通過幀棧自動出、入棧,較簡單,故不較長的描述

<code>Java</code>垃圾回收器(<code>GC</code>)的記憶體釋放 = 垃圾回收算法,主要包括:

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!
Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

常見的記憶體問題如下

記憶體洩露

記憶體抖動

圖檔<code>Bitmap</code>相關

代碼品質 &amp; 數量

日常不正确使用

下面,我将詳細分析每項的記憶體問題 &amp; 給出優化方案

簡介

即 <code>ML (Memory Leak)</code>,指 程式在申請記憶體後,當該記憶體不需再使用 但 卻無法被釋放 &amp; 歸還給 程式的現象

對應用程式的影響

容易使得應用程式發生記憶體溢出,即 <code>OOM</code>

記憶體溢出 簡介:
Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

發生記憶體洩露的本質原因

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

常見記憶體洩露原因

集合類

<code>Static</code>關鍵字修飾的成員變量

非靜态内部類 / 匿名類

資源對象使用後未關閉

優化方案

優化原因

即 為什麼要優化圖檔<code>Bitmap</code>資源,具體如下圖:

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

優化方向

主要 從 以下方面優化圖檔<code>Bitmap</code>資源的使用 &amp; 記憶體管理

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

具體優化方案

下面,我将詳細講解每個優化方向的具體優化方案

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!
Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

盡量避免頻繁建立大量、臨時的小對象

代碼本身的品質(如 資料結構、資料類型等) &amp; 數量(代碼量的大小)可能會導緻大量的記憶體問題,如占用記憶體大、記憶體使用率低等

主要從代碼總量、資料結構、資料類型、 &amp; 資料對象引用 方面優化,具體如下

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

一些常見使用也可能引發大量的記憶體問題,下面我将詳細介紹。

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!
注: 1. 還有1個記憶體優化的終極方案:調大 虛拟機<code>Dalvik</code>的堆記憶體大小 2. 即 在<code>AndroidManifest.xml</code>的<code>application</code>标簽中增加一個<code>android:largeHeap</code>屬性(值 = <code>true</code>),進而通知虛拟機 應用程式需更大的堆記憶體 3. 但不建議 &amp; 不鼓勵該做法

此處,還有一些記憶體優化的小技巧希望告訴給大家

技巧1:擷取目前可使用的記憶體大小

調用 <code>ActivityManager.getMemoryClass()</code>方法可擷取目前應用可用的記憶體大小(機關 = 兆)

技巧2:擷取目前的記憶體使用情況

在應用生命周期的任何階段,調用 <code>onTrimMemory()</code>擷取應用程式 目前記憶體使用情況(以記憶體級别進行識别),可根據該方法傳回的記憶體緊張級别參數 來釋放記憶體

<code>Android 4.0</code> 後提供的一個API
Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

技巧3:當視圖變為隐藏狀态時,則釋放記憶體

當使用者跳轉到不同的應用 &amp; 視圖不再顯示時, 應釋放應用視圖所占的資源

注:此時釋放所占用的資源能顯著的提高系統的緩存處理容量 具體操作:實作目前<code>Activity</code>類的<code>onTrimMemory()</code>後,當使用者離開視圖時會得到通知;若得到傳回的參數 = <code>TRIM_MEMORY_UI_HIDDEN</code> 即代表視圖變為隐藏狀态,則可釋放視圖所占用的資源.

哪怕完全了解 記憶體的原因,但難免還是會出現人為難以發現的記憶體問題

下面将簡單介紹幾個主流的輔助分析記憶體優化的工具,分别是

<code>MAT(Memory Analysis Tools)</code>

<code>Heap Viewer</code>

<code>Allocation Tracker</code>

<code>Android Studio 的 Memory Monitor</code>

<code>LeakCanary</code>

定義:一個<code>Eclipse</code>的 <code>Java Heap</code> 記憶體分析工具

作用:檢視目前記憶體占用情況

通過分析 <code>Java</code> 程序的記憶體快照 <code>HPROF</code> 分析,快速計算出在記憶體中對象占用的大小,檢視哪些對象不能被垃圾收集器回收 &amp; 可通過視圖直覺地檢視可能造成這種結果的對象

定義:一個的 <code>Java Heap</code> 記憶體分析工具

作用:檢視目前記憶體快照

可檢視 分别有哪些類型的資料在堆記憶體總 &amp; 各種類型資料的占比情況

簡介:一個記憶體追蹤分析工具

作用:追蹤記憶體配置設定資訊,按順序排列

簡介:一個 <code>Android Studio</code> 自帶 的圖形化檢測記憶體工具

作用:跟蹤系統 / 應用的記憶體使用情況。核心功能如下

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

簡介:一個<code>square</code>出品的<code>Android</code>開源庫

作用:檢測記憶體洩露

至此,關于記憶體優化的所有知識講解完畢

本文主要講解記憶體優化的相關知識,總結如下:

Android性能優化:這是一份全面&amp;詳細的記憶體優化指南Android性能優化:這是一份全面&amp;詳細的記憶體優化指南前言目錄1. 定義2. 作用3. 儲備知識:Android 記憶體管理機制4. 常見的記憶體問題 &amp; 優化方案5. 輔助記憶體優化的分析工具6. 總結請幫頂 / 評論點贊!因為你的鼓勵是我寫作的最大動力!

下面我将繼續深入講解 <code>Android</code>中的性能優化知識,有興趣可以繼續關注