android效能優化的方案比較多,在開發過程中,主要考慮從以下幾個方面優化
1.布局優化
2.繪製優化
3.記憶體洩漏優化
4.響應速度優化
5.listview優化
6.bitmap優化
7.執行緒優化
接下來我們從這幾個方面為大家簡單介紹優化方案
大家肯定都知道android中有許多布局,比如linerlayout、relativelayout等,布局優化就是減少布局檔案層級,層級減少了,那麼程式繪製時就快了許多,所以可以提高效能。
在布局**中,使用什麼布局基本遵守以下規則:
1.如果布局中既可以使用linearlayout也可以使用relativelayout,那麼就採用linearlayout,這是因為relativelayout的功能比較複雜,它的布局過程需要花費更多的cpu時間。
2.如果布局需要通過巢狀的方式來完成。這種情況下還是建議採用relativelayout,因為viewgroup的巢狀就相當於增加了布局的層級,同樣會降低程式的效能。
3.使用或標籤和viewstub,提取布局中公共部分的布局,可提高布局初始化效率。
繪製優化就是不要再view的ondraw方法中做大量操作。
第一、不要在ondraw方法中建立新的物件,因為ondraw方法可能被頻繁呼叫,這樣會產生大量的臨時檔案,導致記憶體占用過多,程式執行效率降低。
第二、盡可能的不做耗時的操作,大數量的迴圈也會占用cpu的時間
1.不要再acticity中宣告靜態變數,這樣會是的activity無法完全銷毀釋放
3.非靜態內部類建立的靜態例項造成的記憶體洩漏
4.handler造成的記憶體洩漏,不要在activity中用非靜態匿名內部類的方式去引用hanlder,比如
這樣hanlder會持有activity的引用,handler是執行在乙個looper執行緒中的,而looper執行緒是輪詢來處理訊息佇列中的訊息的,假設我們處理的訊息有10條,而當他執行到第6條的時候,使用者退出銷毀了當前的activity,這個時候訊息還沒有處理完,handler還在持有activity的引用,這個時候就會導致無法被gc**,造成了記憶體洩漏。
響應速度優化的核心思想是避免在主線程中做耗時操作,android規定,activity如果5秒鐘之內無法響應螢幕觸控事件或者鍵盤輸入事件就會出現anr,而broadcastreceiver如果10秒,service時20s當然這是小概率事件,如果在相應時間內未得到反映就會出現anr。當有耗時操作時,可以單獨開啟乙個執行緒去操作。
listview優化相信大家也都比較熟悉了,也是比較經典的面試題,在這裡就不詳細贅述了,主要有
復用view,首先判斷view是否為空,如果不為空直接引用,為空再建立
使用viewholder類,settag的方式儲存布局的控制項初始化資訊,避免每次都去findviewbyid影響效率
其實思想也很簡單,那就是採用bitmapfactory.options來載入所需尺寸的。這裡假設通過imageview來顯示,很多時候imageview並沒有的原始尺寸那麼大,這個時候把整個載入進來後再設給imageview,這顯然是沒必要的,因為imageview並沒有辦法顯示原始的。通過bitmapfactory.options就可以按一定的取樣率來載入縮小後的,將縮小後的在imageview中顯示,這樣就會降低記憶體占用從而在一定程度上避免oom,提高了bitmap載入時的效能。
執行緒優化的思想是採用執行緒池,避免程式中存在大量的thread。執行緒池可以重用內部的執行緒,從而避免了執行緒的建立和銷毀所帶來的效能開銷,同時執行緒池還能有效地控制線程池的最大併發數,避免大量的執行緒因互相搶占系統資源從而導致阻塞現象的發生。因此在實際開發中,我們要盡量採用執行緒池,而不是每次都要建立乙個thread物件。
Android常用效能優化方案
android效能優化在實際開發中會經常應用到,當專案越來越龐大時,效能優化就顯得更加重要,寫出高效能優化 不但需要豐富的經驗,而且還需要了解其原理,這樣才有助於我們寫出高效能的 今天我們來總結一下日常開發中常用效能優化方案,看看你都熟悉哪些。android效能優化包括 布局優化 繪製優化 記憶體洩...
Android效能優化
android效能優化 1.http用gzip壓縮,設定連線超時時間和響應超時時間 http請求按照業務需求,分為是否可以快取和不可快取,那麼在無網路的環境中,仍然通過快取的httpresponse瀏覽部分資料,實現離線閱讀。2.listview 效能優化 1 復用convertview 在geti...
Android效能優化
1.節制地使用service 如果應用程式當中需要使用service來執行後台任務的話,請一定要注意只有當任務正在執行的時候才應該讓service執行起來。另外,當任務執行完之後去停止service的時候,要小心service停止失敗導致記憶體洩露的情況 2.當介面不可見時釋放記憶體 當使用者開啟另...