高企證書編號:GR201744011385

都灵vs弗洛西诺:APP開發:性能優化建議,全面提升移動用戶使用體驗

發布日期:2017-12-16   瀏覽次數:   來源:廣州網站建設

陈都灵vs章泽天 www.ndivwv.com.cn       移動互聯網普及,手機已經成為工作生活的日常標配。面對巨大的移動用戶流量,不少企業商家不單單進行PC端的網站建設,更紛紛搭建手機網站、APP開發、小程序開發,打造互聯網全方位解決方案,實現品牌多渠道快速傳播。今天優網科技程序猿就給大家說說APP開發一些性能優化的建議,讓移動用戶使用APP更流暢,手機占存更小,全面提升移動端用戶的使用體驗。

1. itmap的合理使用:使用Bitmap過后,就需要及時的調用recycle()方法來釋放Bitmap占用的內存空間,而不要等Android系統來進行釋放。

代碼示例:

// 先判斷是否已經回收

if(bitmap != null && !bitmap.isRecycled()){

bitmap.recycle();

bitmap = null;

}

System.gc();

 

2. 對常量使用static final修飾符

static final int intVal = 42;

static final String strVal = “Hello, world!”;

       將一個方法或類聲明為final不會帶來性能的提升,但是會幫助編譯器優化代碼。舉例說,如果編譯器知道一個getter方法不會被重載,那么編譯器會對其采用內聯調用。

 

3. 靜態方法代替虛擬方法

       如果不需要訪問某對象的字段,將方法設置為靜態,調用會加速15%到20%。這也是一種好的做法,因為你可以從方法聲明中看出調用該方法不需要更新此對象的狀態。

 

4. 減少不必要的全局變量

        盡量避免static成員變量引用資源耗費過多的實例,比如Context,因為Context的引用超過它本身的生命周期,會導致Context泄漏。所以盡量使用Application這種Context類型。 可以通過調用Context.getApplicationContext()或 Activity.getApplication()輕松得到Application對象。

 

5. 避免創建不必要的對象: 就是避免創建短命的臨時對象。減少對象的創建就能減少垃圾收集,進而減少對用戶體驗的影響。

        例如:頻繁操作一個字符串時,使用StringBuffer代替String。對于所有所有基本類型的組合:int數組比Integer數組好,這也概括了一個基本事實,兩個平行的int數組比 (int,int)對象數組性能要好很多。.避免使用浮點數,通常的經驗是,在Android設備中,浮點數會比整型慢兩倍。

 

7. 使用實體類比接口好

      假設你有一個HashMap對象,你可以將它聲明為HashMap或者Map:

Map map1 = new HashMap();

HashMap map2 = new HashMap();

      哪個更好呢?按照傳統的觀點Map會更好些,因為這樣你可以改變他的具體實現類,只要這個類繼承自Map接口。傳統的觀點對于傳統的程序是正確的,但是它并不適合嵌入式系統。調用一個接口的引用會比調用實體類的引用多花費一倍的時間。如果HashMap完全適合你的程序,那么使用Map就沒有什么價值。如果有些地方你不能確定,先避免使用Map,剩下的交給IDE提供的重構功能好了。(當然公共API是一個例外:一個好的API常?;崳恍┬閱埽?/p>

 

8. 訪問成員變量比訪問本地變量慢得多

for循環:不要在for的第二個條件中調用任何方法

反例:for(int i =0; i < this.getCount(); i++) {}

正例:int count = this.mCount;  int count = this.getCount();

for(int i =0; i < count; i++)  {

}

 

9. 資源類對象在不使用的時候,應該及時關閉它們,方便它們的緩存數據能夠及時回收。

       例如:Cursor、File文件等都需要在finally中關閉資源性對象,避免在異常情況下資源對象未被釋放的隱患

 

10. 注冊廣播接收器、注冊觀察者等需要在不使用的時候取消注冊。

      例如:假設在Activity中,監聽系統的電話服務,可以在Activity中定義一個PhoneStateListener的對象,同時將它注冊到TelephoneManager服務中。對于Activity對象,理論上要求Activity退出后該Activity的對象就會被釋放掉。但是如果在釋放Activity對象時,忘記取消之前注冊的PhoneStateListener對象,則會導致Activity無法被GC回收。如果不斷的進出這個Activity,則最終會由于大量的Activity對象沒有辦法被回收而引起頻繁的GC情況,甚至導致Out Of Memory。

 

11. 有效的利用系統自帶的資源,Android系統內置了大量的資源,比如字串、顏色定義、常用Icon圖片、動畫樣式、及簡單的布局,沒有特殊要求,資源可以在程序中直接引用。這樣不僅減少內存的開銷,還可以減少apk的大小。

 

12. 視圖復用,使用ViewHolder實現ConvertView復用,這基本上是所有容器控件的處理方式,如ListView、GridView等。

 

13. 使用最優的數據類型,比較少的對象數時,ArrayMap替換HashMap的使用,避免使用枚舉,枚舉變量非常方便,但不幸的是它會犧牲執行的速度和并大幅增加文件體積。

 

14. 圖片內存優化

       Android提供的多種位圖格式中,最高的是RGB_8888,也是系統默認的位圖格式,其他幾種都減少位圖通道,可以減少內存開銷,如一些局部圖片、小屏幕手機或者對圖片質量要求不高的場景,均可以使用RGB_565,或者ARGB_ 4444 等圖像格式。

圖片縮放:inSampleSize、inScaled、inDensity和inTargetDensity

位圖內存重用:inBitmap的使用,可以結合LruCache實現。

推薦開源庫:picasso、Glide

 

15. Android 網絡通信框架Volley。

 

16. 對象池、線程池的合理使用。

 

17. 使用IntentService替代Service。

       IntentService優勢:新開線程;順序處理Intent;執行完自動退出。

 

18. 盡量不要因一兩個特性而使用大體積類庫。

 

19. 對象不用時最好顯式置為Null可以減少GC開銷。

 

20. 多了解并使用類庫。

 

一些例子

1. 當處理字串的時候,盡量使用String.indexOf(),String.lastIndexOf()等特殊實現的方法。這些方法都是使用C/C++實現的,比起Java循環快 10 到 100 倍。

2. System.arraycopy方法在有JIT的Nexus One上,自行編碼的循環快 9 倍。

3. android.text.format包下的Formatter類,提供了IP地址轉換、文件大小轉換等方法;DateFormat類,提供了各種時間轉換,都是非常高效的方法。

4. TextUtils類,對于字符串處理Android為我們提供了一個簡單實用的TextUtils類,如果處理比較簡單的內容不用去思考正則表達式不妨試試這個在android.text.TextUtils的類

5. 高性能MemoryFile類,對于I/O需要頻繁操作的,主要是和外部存儲相關的I/O操作,MemoryFile通過將 NAND或SD卡上的文件,分段映射到內存中進行修改處理,這樣就用高速的RAM代替了ROM或SD卡,性能自然提高不少,對于Android手機而言同時還減少了電量消耗。該類實現的功能不是很多,直接從Object上繼承,通過JNI的方式直接在C底層執行。

 

內存優化工具

推薦內存分析工具:Memory Monitor  適用于Android Studio

推薦內存泄露分析工作:MAT 適用于eclipse、Android Studio

內存泄露監控工具:LeakCanary

責任編輯:優網技術部
版權所有:陈都灵vs章泽天 轉載請注明出處

推薦案例
眼光高度決定品牌厚度!
業務展示
專業團隊,品質服務

預算不足沒關系,

這里

掃一掃馬上咨詢
備案號:粵ICP備09025660號 Copyright ? 2019 All Rights Reserved

返回頂部

微信掃碼咨詢

廣州總部電話:

020-85564311

85563853

深圳電話:

18666627370

廣州網站建設

關注優網

廣州網站建設

手機站

進入舊官網

收起快捷

手机里挖矿赚钱的软件下载 李逵劈鱼游戏破解 水果代购怎么赚钱 2017投资少最赚钱 官方网龙江微乐麻将 怎么利用借贷赚钱 捕鱼游戏logo 小鱼赚钱怎么下载不了 2019捕鱼平台 快递运这么一车东西赚钱吗 养狼专业户靠什么赚钱 举办大型活动赚钱 国外网络推广赚钱项目 三人麻将有哪些软件 济南滴滴专车赚钱 我想赚钱用英文怎么说