在之前我們講了很多能夠優化 Android 開發項目質量的方案,這些方案更多的是從一些比較專精的方向切入的,闡述的是一些比較重要且獨立的優化方案。
本文我們將總結一下在日常開發過程中我們能夠使用的一些優化項目的技巧和方案。
一、RecycleView 優化
RecycleView在開發時可以考慮以下優化的方案:
1. 數據處理和視圖加載分離
a. 數據的處理邏輯盡可能放在異步處理,onBindViewHolder方法只做數據填充視圖的操作。
b. 對ItemView設置監聽器,不要對每一個Item都調用addxxListener,可以考慮公用一個xxListener,根據ID的不同來操作,優化了對象的頻繁創建帶來的資源消耗。
2. 數據加載優化
a. 分頁拉去遠端數據,並對拉去下來的數據進行緩存,盡可能提升二次加載速度。
b. 對於新增的或者刪除數據通過 DiffUtil 進行局部數據的刷新,盡量不進行全局數據刷新。
c. 對於使用庫版本在25.1.0及以上的時候使用Prefetch功能。
補充:
a. DiffUtil 推薦博客和項目地址:https://github.com/mcxtzhang/SupportDemos、【Android】RecyclerView的好伴侶:詳解DiffUtil
b. Prefetch 推薦博客地址:RecyclerView Prefetch功能探究。
3.布局優化
a. 減少布局層級,簡化ItemView。
b. 如果Item高度是固定的話,可以使用RecycleView.setHasFixedSize(true)來避免requestLayout浪費資源。
c. 如果多個RecycleView的Adapter是一樣的,比如嵌套的RecycleView中存在一樣的Adapter,可以通過設置RecycleView.setRecycleViewPool(pool),來共用一個RecycleViewPool。
二、WebView 優化
1. WebView 加載優化
a. 可以將一些資源文件放在assest目錄,然后重寫WebViewClient的shouldInterreptRequest方法,進行訪問地址攔截,當url地址命中本地配置的url時,使用本地資源替代,否則就使用網絡上的資源。
b. WebView 初始化慢,可以在適當的時機初始化好一個WebView待用,如果時機合適也可以在初始化好之后請求數據。
2. WebView 內存泄漏優化
a. 建議直接在代碼中創建WebView,即使用new WebView(),並傳入Application Context 代替在 XML 里面聲明防止 Activity 引用被濫用,能解決90%以上的WebView內存泄漏。使用示例如下:
webview = new WebView(getContext().getApplication()); container.addView(webview);
b. 及時銷毀WebView。 示例代碼如下:
if(webview != null) { webview.setWebViewClient(null); webview.setWebChromeClient(null); webview.loadDataWithBaseURL(null, "”, "text/html", "utf-8", null); ((ViewGroup) webview.getParent()).removeView(webview); webview.destroy(); webview = null; }
三、Apk 包體積優化
1. 資源優化
a. 使用 Lint 工具掃描工程資源,手動移除無用資源。
b. 在Gradle參數中配置 shrinkResource=true。
c. 優先考慮使用Shape代碼、.9圖、svg矢量圖、VectorDrawable 類來替換傳統的圖片。
2. 代碼優化
a. 啟用混淆以移除無用代碼。
b. 檢查代碼邏輯,提高復用率。
3. so庫優化
可以考慮只提供主流架構的支持,比如arm,對於mips和x86架構可以考慮不提供支持
android { defaultConfig { ... ndk { abiFilters "armeabi-v7a" } } }