1. 程式人生 > >關於Android效能優化的簡單總結

關於Android效能優化的簡單總結

Android效能優化
Android效能優化主要分幾大類:1。app啟動優化  2.佈局優化   3. 響應優化    4.記憶體優化   5.網路優化
    
一。效能分析工具
    1。Hierarchy Viewer提供了一個視覺化的介面來檢測佈局的層級,讓我們可以優化佈局層級,刪除多餘的不必要的層級,提升佈局速度
        其中下邊有三個圓形的圖示分別表示測量 、 排版、畫布局的效能  綠色表示比50%的都快   黃色表示比50%都慢,紅色表示是最慢的
    2. TraceView  一個圖形化的工具,用來展示和分析方法的執行時間。根據展示的時間來進行方法的優化
二。App啟動優化
    1.application的onCreate方法中不要做太多的事情
    2.首屏activity儘量要簡化
三。佈局優化
    1.儘量減少佈局層級和複雜度
        去除不必要的父佈局
        儘量不要巢狀使用RelativeLayout
        多用TextView的Drawable
        如果HierarchyViewer的層級超過了五層一定要優化
    2.使用include來重用佈局
    3.listview的優化
        convertView的複用
        引入ViewHolder來減少findViewById();
        資料要使用分頁載入
四。響應優化
    Anr產生時,會在data\anr\traces.txt  生成一個日誌檔案,可以檢視導致anr產生的原因
    如何避免:不要在ui執行緒執行耗時的操作,包括網路請求  資料解析  圖片載入,耗時的操作要放在子執行緒中執行
五。記憶體優化
    主要出現的問題:記憶體消耗過大,記憶體洩露,記憶體抖動最主要的原因是因為gc操作過於頻繁,在進行gc的時候所線上程會停止執行
    記憶體消耗過大:Android中常見的就是圖片資源消耗過大,因此在載入圖片的時候建議使用開發的圖片框架,比如universal-image-loader,或者是glide
    記憶體洩露:  1.對context的引用   如果是全部變數引用context這時候該activity的生命週期被延長,這時候可以用application的context。
             使當前的activity可以及時的銷燬掉,釋放記憶體
             總結:根據元件的生命週期合理使用context
           2.內部類的問題
             當在一個類中new一個內部類的時候,這時內部類會持有外部類的引用,這時候建議使用靜態內部類,這樣當內部類建立的時候並不需要外部類的引用,
             減少外部類的生命週期,使其可以更好的被回收釋放資源
             如果內部類想呼叫外部類的方法,可以使用弱引用
             程式碼示例:
                 @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_memory_leak);
                new DemoHandler(this).sendEmptyMessageDelayed(1, 60 * 1000);
            }
             private static class DemoHandler extends Handler {
                 private final WeakReference<HandlerLeakActivity> mActivity;
                 private DemoHandler(HandlerLeakActivity activity) {
                 this.mActivity = new WeakReference<>(activity);
            }
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                HandlerLeakActivity activity = mActivity.get();
                 if (activity != null) {
                    activity.doSomething();
                        }
                    }
                 }
             private void doSomething() {
             }
           3.觀察者   listener    廣播等註冊和銷燬沒有成對出現,會出現記憶體洩露
            常用的方法有 add\remove  register\unregister   bind\unbind
           4.資源洩露   
            常見的有:cursor、io、資料庫連結等沒有及時的關閉
           5.bitmap記憶體洩露
            bitmap沒有及時回收導致記憶體洩露
            一般情況下可以使用軟引用,當記憶體不夠的時候可以回收掉
           6.在UI看不見時釋放Memory
             在使用者切換到其他的app,並且你的app頁面不可見時,你應該釋放你的ui上佔用的任何資源。為了能夠接收到使用者離開你UI的通知,
             應該重寫activity的onTrimMemory()方法(API14,如果是更好的版本可以使用onLowMemory()),在這個方法裡面監聽UI當前app的UI級別,
             如果是TRIM_MEMORY_UI_HIDDEN當用戶按下home鍵時該方法會被呼叫,這時可以讓程式直接退出呼叫 System.exit0(0);
    如何解決gc頻繁操作:1.儘量不要在迴圈裡面頻繁建立物件,這樣的話每迴圈一次就會銷燬,就會呼叫垃圾回收,gc執行的時候會阻塞執行緒,導致頁面卡頓。
    成員變數要在類裡面進行定義,這樣能減少不必要的gc操作
    總結:當系統開始清除lru的程序時,儘管首先按照例如的順序來管理程序,但他同樣會考慮程序的記憶體使用量,噹噹前程序使用記憶體過多的時候同樣會被回收掉。
六。網路優化
    減少網路請求的頻次:  把需要的資料儘量封裝在一個集合中,減少請求的次數
    減小獲取資料包的大小:主要是獲取資料的型別現在一般使用json可讀性好,佔用的資源較小
    使用網路快取:          把一些時效性不高的資料可以適當的進行網路快取
                  比如首頁的圖片可以進行快取

相關推薦

Android效能優化----經典總結

Android 效能優化典範(一):主要從 Android 的渲染機制、記憶體與 GC、電量優化三個方面展開,介紹了 Android 中效能問題的底層工作原理,以及如何通過工具來找出效能問題及提升效能的建議。 Android 效能優化典範(二):主要內容為:電量優化、網路優化、Android W

關於Android效能優化簡單總結

Android效能優化 Android效能優化主要分幾大類:1。app啟動優化  2.佈局優化   3. 響應優化    4.記憶體優化   5.網路優化      一。效能分析工具     1。Hierarchy Viewer提供了一個視覺化的介面來檢測佈局的層級,讓我

Android效能優化——如何避免OOM總結

從四個方面著手,首先是減小物件的記憶體佔用,其次是記憶體物件的重複利用,然後是避免物件的記憶體洩露,最後是記憶體使用策略優化。 減小物件的記憶體佔用 避免OOM的第一步就是要儘量減少新分配出來的物件佔用記憶體的大小,儘量使用更加輕量的物件。 1)使用更加輕

自己的Android效能優化總結

前言: 之前效能優化相關的學習都是靠查資料學,效能優化相關的內容挺多的,自己來做個總結吧!有時間自己就把之前寫的筆記整理一點,一點一點積累。 apk瘦身 使用progard 使用webp圖片 使用向量圖 移除未使用的資源 儘量使用系統資源

Android開發效能優化總結

一.Android相關 1.  採用硬體加速,在androidmanifest.xml中application新增 android:hardwareAccelerated="true"。不過這個需要在android 3.0才可以    使用。android4.0這個選項

Android效能優化總結

1. 緣由 Android系統每隔16ms發出VSYNC訊號,對UI進行渲染,如果每次渲染都成功,就能夠達到流暢的畫面所需要的60fps,為了能夠實現60fps,這意味著程式的大多數操作都必須在16ms內完成,時間超出16ms越多,丟的幀就越多。 假設我

Android APP效能優化(最新總結)

導語 安卓大軍浩浩蕩蕩,發展已近十個年頭,技術優化日異月新,如今Android 8.0 Oreo 都發布了,Android系統性能已經非常流暢了。但是,到了各大廠商手裡,改原始碼自定系統,使得An

Android 效能優化總結和彙總

對於Android開發者而言,開發出一個應用程式已經不是很難的問題。但是,如果要想開發出優質的應用或者程式就需要知道如何優化應用以及對程式效能優化的一些知識。那麼如何去優化程式呢?安卓框架已經提供了很好的工具來幫助開發者做這件事情。廢話少說,進入正題。 A.

Android 效能優化總結

6、合理選擇容器,在效能上優先考慮陣列,即使我們現在習慣了使用容器,也要注意頻繁使用容器在效能上的隱患點:首先是擴容開銷, HashMap擴容時重新Hash的開銷較大。其次是記憶體開銷,HashMap需要額外的Map.Entry物件分配 ,需要額外記憶體,也容易產生更多的記憶體碎片。SparseArray和

Android——效能優化之SparseArray

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

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

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

Android效能優化——介面流暢度優化

Android效能優化——介面流暢度優化   序言 首先流暢度不僅僅是受到程式碼的影響。也會跟機器的硬體配置有關係。所以第一點需要明確的是,流暢度最低保證在哪個硬體配置之上。這樣有了一個基點之後,才能比較好明確優化目標。不然你拿一個兩三年前的機子來做優化。那就真的是吃力不討好的

前端效能優化常用總結

前言 對於前端的效能話題,從來都沒有斷絕過。因為這個東西沒有最好,只有更好。而且往往也是業務的繁雜程度去決定優化程度的。作為一個前端開發者,效能是我們關注的指標。它直接影響著我們的使用者,同時也影響著產品本身。前端發展以來,優化方式,琳琅滿目,有雅虎軍規等。這些內容複雜繁多,往往容易被人遺忘。因

PHP的效能優化方法總結

什麼情況之下,會遇到PHP效能問題? 1:PHP語法使用不恰當。 2:使用PHP語言做了它不擅長的事情。 3:使用PHP語言連線的服務不給力。 4:PHP自身的短板(PHP自身做不了的事情)。 5:我們也不知道的問題?(去探索、分析找到解決辦法,提升開發境界)。 對線上站點做壓力測試的時候

Android效能優化之圖片壓縮優化

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

Android效能優化—不建議使用列舉Enum

最近優化App,由於專案中使用了Lib,而Lib程式碼中包含了大量的列舉型別,導致App佔用記憶體過多。好吧,知道問題點,那就幹掉,拋棄之~ 問題是解決了,為啥會這樣呢? 先來看看Android官網的說明吧: 看見了吧,Android官網不建議咱們使用enums,說的也很清楚了,佔用記憶體多(E

Android 效能優化——記憶體篇

歡迎轉載,轉載請標明出處【Hoolay Team】: http://www.cnblogs.com/hoolay/p/6278229.html Author : Hoolay Android Team  Chiclaim 一、android官方一

【藝術探索筆記】第 15 章 Android 效能優化

第 15 章 Android 效能優化 Android 裝置作為一種移動裝置,不管是記憶體還是 CPU 的效能都受到了一定的限制,無法像 PC 那樣具有超大的記憶體和高效能的 CPU。所以 Android 程式不可能無限制的使用記憶體和 CPU 資源,過多的使

Android效能優化之apk瘦身技巧

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

Android 效能優化大全

佈局優化 1.減少佈局巢狀的層級 2.相對於RelativeLayout,更適合用LinearLayout 3.使用<include>和<merge>以及ViewStub標籤繪製優化 1.onDraw方法裡面儘量不要建立新的物件 2.onDraw方法中儘量不要執行耗時操作