1. 程式人生 > >Android應用效能優化之使用SparseArray替代HashMap

Android應用效能優化之使用SparseArray替代HashMap

原文地址:http://liuzhichao.com/p/832.html

HashMap是java裡比較常用的一個集合類,我比較習慣用來快取一些處理後的結果。最近在做一個Android專案,在程式碼中定義這樣一個變數,例項化時,Eclipse卻給出了一個 performance 警告。

意思就是說用SparseArray<E>來替代,以獲取更好效能。老實說,對SparseArray並不熟悉,第一感覺應該是Android提供的一個類。按住Ctrl點選進入SparseArray的原始碼,果不其然,確定是Android提供的一個工具類。

單純從字面上來理解,SparseArray指的是稀疏陣列(Sparse array)

,所謂稀疏陣列就是陣列中大部分的內容值都未被使用(或都為零),在陣列中僅有少部分的空間使用。因此造成記憶體空間的浪費,為了節省記憶體空間,並且不影響陣列中原有的內容值,我們可以採用一種壓縮的方式來表示稀疏陣列的內容。

假設有一個9*7的陣列,其內容如下:

在此陣列中,共有63個空間,但卻只使用了5個元素,造成58個元素空間的浪費。以下我們就使用稀疏陣列重新來定義這個陣列:

其中在稀疏陣列中第一部分所記錄的是原陣列的列數和行數以及元素使用的個數、第二部分所記錄的是原陣列中元素的位置和內容。經過壓縮之後,原來需要宣告大小為63的陣列,而使用壓縮後,只需要宣告大小為6*3的陣列,僅需18個儲存空間。

繼續閱讀SparseArray的原始碼,從構造方法我們可以看出,它和一般的List一樣,可以預先設定容器大小,預設的大小是10:

1 public SparseArray() {
2 this(10);
3 }
4
5 public SparseArray(int initialCapacity) {
6 initialCapacity = ArrayUtils.idealIntArraySize(initialCapacity);
7

相關推薦

Android應用效能優化使用SparseArray替代HashMap

原文地址:http://liuzhichao.com/p/832.html HashMap是java裡比較常用的一個集合類,我比較習慣用來快取一些處理後的結果。最近在做一個Android專案,在程式碼中定義這樣一個變數,例項化時,Eclipse卻給出了一個 pe

android應用效能優化幀率

轉自:http://www.cnblogs.com/myzh/archive/2013/03/17/2965225.html   1、縱觀全域性   對於順暢度的分析,首先要知道一個整體情況,是區域性,還是全域性,這樣在優化上才能有方向。   如果是區域性問題,那就需要仔細分析出具體的相關操作,如果是大體上

Android——效能優化SparseArray

相信大家都用過HashMap用來存放鍵值對,最近在專案中使用HashMap的時候發現,有時候 IDE 會提示我這裡的HashMap可以用SparseArray或者SparseIntArray等等來代替。 SparseArray(稀疏陣列).它是Android內部特有的api,標準的jdk是沒有這

android專案效能優化啟動時間

一般來說,判定一個android專案效能優劣,我們有以下幾個指標: 啟動時間 apk大小 UI渲染 穩定性 記憶體佔用 電量消耗 接下來,讓我們就這幾個指標展開來詳述各自究竟應該怎樣去優化。 啟動時間 一般來說,應用啟動時間分為三種 首次啟動

Android App效能優化UI流暢度優化

一、卡頓的問題本質 UI流暢度的優化主要是解決UI卡頓的現象,而UI卡頓的源頭就是渲染效能的問題。佈局太複雜或者是一個元素重複繪製多次等原因,Android系統無法及時完成那些複雜的介面渲染操作,這樣就發生了丟幀,使用者就會感覺到不流暢,卡頓。 Androi

Android應用效能測試CPU和記憶體佔用

 最近發現自己學的很多東西沒有做好積澱的工作,也萌生了寫一些東西的念頭。本人也沒有寫部落格的習慣,下邊就寫一下手機端的效能測試。   最近公司,要我們從事對競品的效能測試,我負責CPU和記憶體的效能測試,下面就和大家來分享一下android應用程式的CPU和記憶體的效能

Android 效能優化應用啟動

寫在前面 最近工作轉到Android 效能優化方向,剛轉過來,相關經驗缺乏,紀錄一個目前讓人惱火的問題。非常遺憾,本文到目前為止還未能提供解決問題的優化方案,也沒有明確定位到導致效能問題的瓶頸所在。就像解數學題一樣,花費了大把時間,然並卵。之所以寫它

Android效能優化 -- 應用啟動優化啟動頁設計

上篇部落格我們學習了應用啟動優化的一些優化思路,經過這些優化後,如果還不能達到你的要求,我們一般會做個啟動頁。因為啟動頁一般View數量比較少,業務邏輯比較簡單,因此啟動比較快。一、設計思路常規啟動頁設計思路通常點選桌面就會執行Application中的邏輯,然後會跳入啟動頁

Android效能優化較精確的獲取影象顯示到螢幕上的時間

轉載自:http://blog.desmondyao.com/android-show-time/ 這兩天我的包工頭歪龍木·靈魂架構師·王半仙·Yrom給我派了一個活:統計App冷啟動時間。這個任務看上去不難,但是要求統計出來的時間要準,要特別準。 意思就是,我必須要按Activity繪製到

Android效能優化圖片壓縮優化

1 分類Android圖片壓縮結合多種壓縮方式,常用的有尺寸壓縮、質量壓縮、取樣率壓縮以及通過JNI呼叫libjpeg庫來進行壓縮。 參考此方法:Android-BitherCompress 備註:對於資源圖片直接使用:tiny壓縮 2 質量壓縮(1)原理:保持畫素的前提下改變圖片的位深及透明度,(即:通

Linux效能優化應用CPU使用率100%,該如何?

最常用什麼指標來描述系統的 CPU 效能呢?可能不是平均負載,也不是 CPU 上下文切換,而是另一個更直觀的指標—— CPU 使用率。 我們前面說過,CPU 使用率是單位時間內 CPU 使用情況的統計,以百分比的方式展示。諸 如 top、ps 之類的效能工具展示的 %user、%nice、 %system、

Android效能優化apk瘦身技巧

隨著專案迭代,新功能的增加。回導致apk越大。那麼在下載安裝過程中。使用者耗費的流量越多。 安裝等待的時間也會越長。這就意味著下載轉化率會越低。那麼如何apk瘦身呢? 理解APK結構 在討論怎麼減小Apk體積之前,理解一個應用的APK結構是非常有幫助的。一個ap

Android效能優化佈局優化

          佈局優化可以通過減少佈局層級來提高,儘量減少使用效能低的佈局,LineaLayout的效率最高,在可以使用LinearLayout或者RelativeLayout時,選擇LinearLayout。因為RelativeLayout測量較為複雜,需要測量水平和

Android效能優化工具Hierarchy Viewer使用總結

概述 Hierarchy Viewer提供了一個視覺化的介面來觀測佈局的層級, 讓我們可以優化佈局層級, 刪除多餘的不必要的View層級, 提升佈局速度. 應用Hierarchy Viewer 目前Hierarchy Viewer只能在root過的機器才能使用. 主要是在沒有ro

Android進階——效能優化程序拉活原理及手段完全解析(二)

引言 上一篇文章Android進階——效能優化之程序保活原理及手段完全解析(一)總結了Android程序和執行緒的相關知識,主要介紹了幾種提升程序優先順序的手段,通常僅僅是提高優先順序只能讓你的程序存活時間久一點,但是真正的被殺死之後就不會自動拉活的,如果你的程

Android效能優化實現擁有Looper的執行緒--HandlerThread

1 HandlerThread 1.1 定義   HandlerThread是能夠新建擁有Looper的Thread,這個Looper能夠用來新建其他的Handler。HandlerThread本質是一個執行緒,線上程內部,程式碼是序列處理的。(執行緒中

Android 效能優化String篇

Android 效能優化之 String篇 關於String相關知識都是老掉牙的東西了,但我們經常可能在不經意的String 字串拼接的情況下浪費記憶體,影響效能,也常常會成為觸發記憶體OOM的最後一步。 所以本文對String字串進行深度解析,有

Android進階——效能優化儘量多使用AsyncTask進行短時間網路通訊

引言 對於我們Android 開發來說,網路操作應該是最普遍不過的操作了吧,因為沒有網路操作的APP應該就沒有存在的價值吧,往往網路操作這部分又通常是耗時的,所以為了良好的使用者體驗,我們必須把耗時操作放到非UI執行緒,而實現方式有很多種,比較常見的應該就是H

Android效能優化:XML佈局檔案優化

Android中XML佈局檔案的使用非常頻繁,在載入XML佈局的時候,如果對XML檔案其進行優化,將會提高載入的效率。 HierarchyViewer工具 再開始介紹之前先說一下HierarchyViewer工具的使用。 不合理的佈局會使我們的應用程式

Android效能優化提高ListView效能的技巧

ListView優化一直是一個老生常談的問題,不管是面試還是平常的開發中,ListView永遠不會被忽略掉,那麼這篇文章我們來看看如何最大化的優化ListView的效能。 1.在adapter中的getView方法中儘量少使用邏輯 2.盡最大可能避免GC 3