android介面最佳化技巧

來源:互聯網
上載者:User

標籤:android介面最佳化   android效能最佳化   android最佳化   

最佳化將從以下幾個方面談及
  1. 如何使用 Adapter
  2. 背景和映像
  3. 更新要求
  4. 視圖和布局
  5. 記憶體配置
adapter:    最簡單的方法, 最慢最不實用,    更新頻率每秒傳輸幀數10左右    利用 convertView 回收視圖, 效率提高 200%,更新頻率每秒傳輸幀數30左右    使用 ViewHolder 模式, 效率提高 250%,更新頻率每秒傳輸幀數40左右背景和映像:    選擇恰當的映像尺寸,視圖背景映像總會填充整個視圖地區:            * 映像尺寸不合適會導致自動縮放            * 避免即時縮放            * 最好預先縮放到視圖大小            originalImage = Bitmap.createScaledBitmap(                    originalImage, // 被縮放映像                     view.getWidth(), // 視圖寬度                    view.getHeight(), // 視圖高度                    true); // 雙線性過濾器            背景和映像 更新頻率,預先縮放每秒傳輸幀數在50左右 ,自動縮放25左右       視窗背景:            * 預設情況下, 視窗有一個不透明的背景            * 有時可以不需要。                     - 最高層的視圖是不透明的                    - 最高層的視圖覆蓋整個視窗 fill_parent            * 更新看不見的背景是浪費時間            * 刪除視窗背景                    - getWindow().setBackgroundDrawable(null);                    - <item name="android:windowBackground">@null</item>             視窗背景 更新頻率,有背景的每秒傳輸幀數在42左右 ,沒有背景在50左右      更新要求:            * 當螢幕需要更新時, 調用 invalidate()                    - 簡單方便                    - 但會更新整個視圖, 太貴了            * 最好先找到無效地區, 然後調用。更有效執行方法是只更新需要更新的地區                    - invalidate(Rect dirty);                    - invalidate(int left, int top, int right, int  bottom);            視窗背景 更新頻率:invalidate傳輸每秒18左右,後兩個在48左右    視圖和布局:            * 如果一個視窗包含很多視圖                    - 啟動時間長  測量時間長   布局時間長  繪製時間長            * 如果視圖樹深度太深                    - StackOverflowException  使用者介面反應速度很慢            * 解決方案                    - 使用 TextView 的複合 drawables 減少層次                    - 使用 ViewStub 延遲展開視圖                    - 使用 <merge> 合并中間視圖                    - 使用 RelativeLayout 減少層次                    - 使用自訂視圖、使用自訂布局   記憶體配置:            * 不要建立 Java 對象,在效能敏感的代碼裡, 盡量避免建立 Java 對象                    - 測量: onMeasure()                        - 布局: onLayout()                    - 繪圖: dispatchDraw(), onDraw()                    - 事件處理: dispatchTouchEvent(), onTouchEvent()                    - Adapter: getView(), bindView()            * GC, 記憶體回收:整個程式會暫停,慢 (大約幾百個毫秒            * 管理好對象                    * 使用軟引用,記憶體緩衝的最佳選擇                    * 使用弱引用,避免記憶體泄露
    總結:        *  用 ViewHolder 實現 Adapter 的 getView        *  為背景選擇正好的映像        *  針對無效區做更新要求        *  視圖和布局,越簡單越好        *  避免在效能敏感路徑上建立對象                    















 

android介面最佳化技巧

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.