Android App界面和流暢度優化

所謂界面和流暢度優化,就是儘量多地消除用戶可直接感知的、影響用戶操做體驗的bugjava

一、人爲在UI線程中作輕微耗時操做,致使UI線程卡頓android

人爲避免一切耗時操做web

開啓 StrictMode(嚴苛模式)性能優化

在Activity里加入以下代碼數據結構

  1. public void onCreate() {  
         if (DEVELOPER_MODE) {  
             StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
                     .detectDiskReads()  
                     .detectDiskWrites()  
                     .detectNetwork()   // or .detectAll() for all detectable problems  
                     .penaltyLog()  
                     .build());  
             StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
                     .detectLeakedSqlLiteObjects()  
                     .detectLeakedClosableObjects()  
                     .penaltyLog()  
                     .penaltyDeath()  
                     .build());  
         }  
         super.onCreate();  
     }  

     

注意:StrictMode只適用於測試版本,千萬不要在上線版本使用 StrictMode

二、佈局Layout過於複雜,沒法在16ms內完成渲染
利用drawableXXX屬性來作有圖文的控件,特別是相似設置頁面中文字在左右邊有剪頭的View
多用tools的屬性例如tools:text tools:listitem

三、同一時間動畫執行的次數過多,致使CPU或GPU負載太重
人爲避免同一時間執行過多動畫

四、View過分繪製,致使某些像素在同一幀時間內被繪製屢次
簡化佈局嵌套
減小沒必要要的背景顏色填充(用純色圖片代替顏色)

在設置-> 開發者選項->調試GPU過分繪製中打開調試
定位繪製區域
利用Android提供的工具進行位置確認以及修改(HierarchyView,Tracer for OpenGL ES)
定位到具體的視圖(xml文件或者View)
經過代碼和xml文件分析過分繪製緣由
結合具體狀況進行優化

五、View頻繁觸發onMeasure,onLayout,致使onMeasure,onLayout累計耗時過多及整個View頻繁的從新渲染
使用系統性能分析工具systrace分析measure, layout耗時

六、內存頻繁觸發GC過多(同一幀中頻繁建立內存),致使暫時阻塞渲染操做
使用內存分配跟蹤工具Allocation Tracker工具跟蹤對象的分配

七、冗餘資源及邏輯等致使加載和執行緩慢
lint檢查刪除冗餘
去除重複庫無用庫,使用更小庫
去除無用的語言資源
圖片壓縮webp
開啓ProGuard
開啓shrinkResourcesapp

[java] view plain copy 在CODE上查看代碼片派生到個人代碼片工具

  1. buildTypes{  
        release{  
            miniyEnabled true  
            shrinkResources true  
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'  
        }  
    }   

     


八、代碼效率低
考慮使用ArrayMap代替傳統數據結構HashMap
避免使用enums,推薦使用static佈局

避免在非Constants類中使用static性能

其餘詳見《大話Java性能優化》

九、其餘
對於不須要使用硬件加速的activity(沒有動畫效果、視頻播放以及各類多媒體文件),不要在AndroidManifest.xml文件聲明activity時添加「android:hardwareAccelerated="true"」關掉硬件加速可節省應用內存

對於須要橫豎屏轉換的應用,又不想在橫豎屏切換的時候從新跑onCreate方法,能夠在AndroidManifest.xml文件聲明Activity時添加「android:configChanges="screenSize|orientation"」

爲了減輕應用程序主進程的內存壓力,對於耗內存比較多的界面(多媒體),能夠在AndroidManifest.xml文件聲明Activity時下添加「android:process=".processname"」單開一個進程,退出在退出這個界面的時候必定要在該界面的onDestory方法中調用System的kill方法來殺掉該進程;

能夠經過爲application、activity自定義主題的方式來關掉多點觸摸功能,只須要在自定義的主題下添加這兩個標籤:
 測試

<item name="android:windowEnableSplitTouch">false</item>
<item name="android:splitMotionEvents">false</item>
相關文章
相關標籤/搜索