當前位置:首頁 » 安卓系統 » android遍歷listview

android遍歷listview

發布時間: 2025-06-18 07:40:48

A. 針對Android的性能優化集中哪些方面

一、概要:

本文主要以Android的渲染機制、UI優化、多線程的處理、緩存處理、電量優化以及代碼規范等幾方面來簡述Android的性能優化

二、渲染機制的優化:

大多數用戶感知到的卡頓等性能問題的最主要根源都是因為渲染性能。

Android系統每隔16ms發出VSYNC信號,觸發對UI進行渲染, 如果每次渲染都成功,這樣就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著程序的大多數操作都必須在16ms內完成。

*關於JobScheler的更多知識可以參考http://hukai.me/android-training-course-in-chinese/background-jobs/scheling/index.html

七、代碼規范

1)for loop中不要聲明臨時變數,不到萬不得已不要在裡面寫try catch。

2)明白垃圾回收機制,避免頻繁GC,內存泄漏,OOM(有機會專門說)

3)合理使用數據類型,StringBuilder代替String,少用枚舉enum,少用父類聲明(List,Map)

4)如果你有頻繁的new線程,那最好通過線程池去execute它們,減少線程創建開銷。

5)你要知道單例的好處,並正確的使用它。

6)多用常量,少用顯式的"action_key",並維護一個常量類,別重復聲明這些常量。

7)如果可以,至少要弄懂設計模式中的策略模式,組合模式,裝飾模式,工廠模式,觀察者模式,這些能幫助你合理的解耦,即使需求頻繁變更,你也不用害怕牽一發而動全身。需求變更不可怕,可怕的是沒有在寫代碼之前做合理的設計。

8)View中設置緩存屬性.setDrawingCache為true.

9)cursor的使用。不過要注意管理好cursor,不要每次打開關閉cursor.因為打開關閉Cursor非常耗時。Cursor.require用於刷cursor.

10)採用SurfaceView在子線程刷新UI,避免手勢的處理和繪制在同一UI線程(普通View都這樣做)

11)採用JNI,將耗時間的處理放到c/c++層來處理

12)有些能用文件操作的,盡量採用文件操作,文件操作的速度比資料庫的操作要快10倍左右

13)懶載入和緩存機制。訪問網路的耗時操作啟動一個新線程來做,而不要再UI線程來做

14)如果方法用不到成員變數,可以把方法申明為static,性能會提高到15%到20%

15)避免使用getter/setter存取field,可以把field申明為public,直接訪問

16)私有內部類要訪問外部類的field或方法時,其成員變數不要用private,因為在編譯時會生成setter/getter,影響性能。可以把外部類的field或方法聲明為包訪問許可權

17)合理利用浮點數,浮點數比整型慢兩倍

18)針對ListView的性能優化,ListView的背景色與cacheColorHint設置相同顏色,可以提高滑動時的渲染性能。ListView中getView是性能是關鍵,這里要盡可能的優化。

getView方法中要重用view;getView方法中不能做復雜的邏輯計算,特別是資料庫操作,否則會嚴重影響滑動時的性能

19)不用new關鍵詞創建類的實例,用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable介面,我們可以調用它的clone()方法。

clone()方法不會調用任何類構造函數。在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現:

20)public static Credit getNewCredit() {
return new Credit();
}
改進後的代碼使用clone()方法,如下所示:
private static Credit BaseCredit = new Credit();
public static Credit getNewCredit() {
return (Credit) BaseCredit.clone();
}
上面的思路對於數組處理同樣很有用。

21)乘法和除法

考慮下面的代碼:

  • for (val = 0; val < 100000; val +=5) { alterX = val * 8; myResult = val * 2; }
    用移位操作替代乘法操作可以極大地提高性能。下面是修改後的代碼:
    for (val = 0; val < 100000; val += 5) { alterX = val << 3; myResult = val << 1; }

  • 22)ViewPager同時緩存page數最好為最小值3,如果過多,那麼第一次顯示時,ViewPager所初始化的pager就會很多,這樣pager累積渲染耗時就會增多,看起來就卡。

    23)每個pager應該只在顯示時才載入網路或資料庫(UserVisibleHint=true),最好不要預載入數據,以免造成浪費

    24)提高下載速度:要控制好同時下載的最大任務數,同時給InputStream再包一層緩沖流會更快(如BufferedInputStream)

    25)提供載入速度:讓服務端提供不同解析度的圖片才是最好的解決方案。還有合理使用內存緩存,使用開源的框架

    引用:Android性能優化的淺談

    B. Android 遍歷手機根目錄下的所有文檔類文件在listView上展示,文件稍微多一點響應速度就很慢,怎麼優化

    在Android應用中,遍歷手機根目錄下的文檔類文件並在ListView上展示時,如果文件數量較多,可能會導致響應速度變慢。解決這一問題,可以通過優化文件遍歷邏輯和列表渲染性能來實現。

    首先,可以將符合條件的文件路徑存儲在一個String數組中。遍歷文件時,可以使用File類的listFiles()方法獲取文件列表,然後通過文件名匹配指定格式,將符合條件的文件路徑添加到數組中。這樣,可以避免在每次用戶點擊時重新遍歷文件,從而提高響應速度。

    其次,優化ListView的渲染性能。可以使用ViewHolder模式,避免在每次渲染時重復創建和銷毀視圖。此外,還可以使用懶載入技術,只在可見范圍內載入文件數據,減少內存消耗和渲染時間。

    進一步地,可以考慮使用非同步線程進行文件遍歷和數據載入,避免阻塞主線程。通過AsyncTask或HandlerThread等機制,可以在後台線程中完成文件遍歷任務,然後將結果更新到UI線程中。這樣可以提高應用的流暢性和響應速度。

    最後,針對大量文件的情況,可以採用分頁載入的方式。將文件數據分組顯示,用戶點擊載入下一頁時,再載入相應范圍的文件數據。這樣可以減少每次載入的數據量,提高應用的載入速度和用戶體驗。

    綜上所述,通過優化文件遍歷邏輯、改進ListView渲染方法、利用非同步載入技術和分頁載入策略,可以有效提升在Android應用中遍歷手機根目錄下大量文檔類文件並在ListView上展示時的響應速度。

    熱點內容
    三星添加ftp 發布:2025-06-18 11:44:38 瀏覽:213
    亂舞三國腳本代碼 發布:2025-06-18 11:41:45 瀏覽:725
    Y連貫演算法 發布:2025-06-18 11:37:25 瀏覽:156
    蘋果系統鈴聲文件夾 發布:2025-06-18 11:36:47 瀏覽:520
    光碟機緩存 發布:2025-06-18 11:24:17 瀏覽:208
    如何看見電腦的密碼 發布:2025-06-18 11:09:36 瀏覽:289
    分布式HTAP資料庫 發布:2025-06-18 11:07:07 瀏覽:654
    銀行卡屬於密碼鎖定狀態什麼意思 發布:2025-06-18 11:06:10 瀏覽:880
    資料庫查詢like 發布:2025-06-18 11:03:02 瀏覽:459
    arnold圖像加密演算法 發布:2025-06-18 11:01:30 瀏覽:179