精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Android開發優化之——從代碼角度進行優化

移動開發 Android
通常我們寫程序,都是在項目計劃的壓力下完成的,此時完成的代碼可以完成具體業務邏輯,但是性能不一定是最優化的。一般來說,優秀的程序員在寫完代碼之后都會不斷的對代碼進行重構。重構的好處有很多,其中一點,就是對代碼進行優化,提高軟件的性能。下面我們就從幾個方面來了解Android開發過程中的代碼優化。

通常我們寫程序,都是在項目計劃的壓力下完成的,此時完成的代碼可以完成具體業務邏輯,但是性能不一定是***化的。一般來說,優秀的程序員在寫完代碼之后都會不斷的對代碼進行重構。重構的好處有很多,其中一點,就是對代碼進行優化,提高軟件的性能。下面我們就從幾個方面來了解Android開發過程中的代碼優化。

1)靜態變量引起內存泄露

在代碼優化的過程中,我們需要對代碼中的靜態變量特別留意。靜態變量是類相關的變量,它的生命周期是從這個類被聲明,到這個類徹底被垃圾回收器回收才會被銷毀。所以,一般情況下,靜態變量從所在的類被使用開始就要一直占用著內存空間,直到程序退出。如果不注意,靜態變量引用了占用大量內存的資源,造成垃圾回收器無法對內存進行回收,就可能造成內存的浪費。

先來看一段代碼,這段代碼定義了一個Activity。

  1. private static Resources mResources;   
  2.  
  3. @Override 
  4.  
  5. protected void onCreate(Bundle state) { 
  6.  
  7. super.onCreate(state); 
  8.  
  9. if (mResources == null) { 
  10.  
  11.     mResources = this.getResources(); 
  12.  
  13.     } 
  14.  
  15.   

這段代碼中有一個靜態的Resources對象。代碼片段mResources = this.getResources()對Resources對象進行了初始化。這時Resources對象擁有了當前Activity對象的引用,Activity又引用了整個頁面中所有的對象。

如果當前的Activity被重新創建(比如橫豎屏切換,默認情況下整個Activity會被重新創建),由于Resources引用了***次創建的Activity,就會導致***次創建的Activity不能被垃圾回收器回收,從而導致***次創建的Activity中的所有對象都不能被回收。這個時候,一部分內存就浪費掉了。

經驗分享:

在實際項目中,我們經常會把一些對象的引用加入到集合中,如果這個集合是靜態的話,就需要特別注意了。當不需要某對象時,務必及時把它的引用從集合中清理掉。或者可以為集合提供一種更新策略,及時更新整個集合,這樣可以保證集合的大小不超過某值,避免內存空間的浪費。

2)使用Application的Context

在Android中,Application Context的生命周期和應用的生命周期一樣長,而不是取決于某個Activity的生命周期。如果想保持一個長期生命的對象,并且這個對象需要一個Context,就可以使用Application對象。可以通過調用Context.getApplicationContext()方法或者Activity.getApplication()方法來獲得Application對象。

依然拿上面的代碼作為例子。可以將代碼修改成下面的樣子。

  1. private static Resources mResources;   
  2.  
  3. @Override 
  4.  
  5. protected void onCreate(Bundle state) { 
  6.  
  7. super.onCreate(state); 
  8.  
  9. if (mResources == null) { 
  10.  
  11.     // mResources = this.getResources(); 
  12.  
  13.     mResources = this.getApplication().getResources(); 
  14.  
  15.     } 
  16.  
  17.   

在這里將this.getResources()修改為this.getApplication().getResources()。修改以后,Resources對象擁有的是Application對象的引用。如果Activity被重新創建,***次創建的Activity就可以被回收了。

3)及時關閉資源

Cursor是Android查詢數據后得到的一個管理數據集合的類。正常情況下,如果我們沒有關閉它,系統會在回收它時進行關閉,但是這樣的效率特別低。如果查詢得到的數據量較小時還好,如果Cursor的數據量非常大,特別是如果里面有Blob信息時,就可能出現內存問題。所以一定要及時關閉Cursor。

下面給出一個通用的使用Cursor的代碼片段。

  1. Cursor cursor = null
  2.  
  3. try
  4.  
  5.     cursor = mContext.getContentResolver().query(uri,null,null,null,null); 
  6.  
  7.     if (cursor != null) { 
  8.  
  9.         cursor.moveToFirst(); 
  10.  
  11.         // 處理數據 
  12.  
  13.     } 
  14.  
  15. catch (Exception e){ 
  16.  
  17.     e.printStatckTrace(); 
  18.  
  19. finally { 
  20.  
  21.     if (cursor != null){ 
  22.  
  23.         cursor.close(); 
  24.  
  25.     } 
  26.  
  27.   

即對異常進行捕獲,并且在finally中將cursor關閉。

同樣的,在使用文件的時候,也要及時關閉。

4)使用Bitmap及時調用recycle()

前面的章節講過,在不使用Bitmap對象時,需要調用recycle()釋放內存,然后將它設置為null。雖然調用recycle()并不能保證立即釋放占用的內存,但是可以加速Bitmap的內存的釋放。

在代碼優化的過程中,如果發現某個Activity用到了Bitmap對象,卻沒有顯式的調用recycle()釋放內存,則需要分析代碼邏輯,增加相關代碼,在不再使用Bitmap以后調用recycle()釋放內存。

5)對Adapter進行優化

下面以構造ListView的BaseAdapter為例說明如何對Adapter進行優化。

在BaseAdapter類中提供了如下方法:

  1. public View getView(int position, View convertView, ViewGroup parent) 
  2.  

當ListView列表里的每一項顯示時,都會調用Adapter的getView方法返回一個View,

來向ListView提供所需要的View對象。

下面是一個完整的getView()方法的代碼示例。

  1. public View getView(int position, View convertView, ViewGroup parent) { 
  2.  
  3.   ViewHolder holder; 
  4.  
  5. if (convertView == null) { 
  6.  
  7.       convertView = mInflater.inflate(R.layout.list_item, null); 
  8.  
  9.       holder = new ViewHolder(); 
  10.  
  11.       holder.text = (TextView) convertView.findViewById(R.id.text); 
  12.  
  13.       convertView.setTag(holder); 
  14.  
  15.   } else { 
  16.  
  17.       holder = (ViewHolder) convertView.getTag(); 
  18.  
  19.   } 
  20.  
  21.   holder.text.setText("line" + position); 
  22.  
  23.   return convertView; 
  24.  
  25.  
  26.   
  27.  
  28. private class ViewHolder { 
  29.  
  30.   TextView text; 
  31.  
  32.   

當向上滾動ListView時,getView()方法會被反復調用。getView()的第二個參數convertView是被緩存起來的List條目中的View對象。當ListView滑動的時候,getView可能會直接返回舊的convertView。這里使用了convertView和ViewHolder,可以充分利用緩存,避免反復創建View對象和TextView對象。

如果ListView的條目只有幾個,這種技巧并不能帶來多少性能的提升。但是如果條目有幾百甚至幾千個,使用這種技巧只會創建幾個convertView和ViewHolder(取決于當前界面能夠顯示的條目數),性能的差別就非常非常大了。

6)代碼“微優化”

當今時代已經進入了“微時代”。這里的“微優化”指的是代碼層面的細節優化,即不改動代碼整體結構,不改變程序原有的邏輯。盡管Android使用的是Dalvik虛擬機,但是傳統的Java方面的代碼優化技巧在Android開發中也都是適用的。

下面簡要列舉一部分。因為一般Java開發者都能夠理解,就不再做具體的代碼說明。

創建新的對象都需要額外的內存空間,要盡量減少創建新的對象。

將類、變量、方法等等的可見性修改為最小。

針對字符串的拼接,使用StringBuffer替代String。

不要在循環當中聲明臨時變量,不要在循環中捕獲異常。

如果對于線程安全沒有要求,盡量使用線程不安全的集合對象。

使用集合對象,如果事先知道其大小,則可以在構造方法中設置初始大小。

文件讀取操作需要使用緩存類,及時關閉文件。

慎用異常,使用異常會導致性能降低。

如果程序會頻繁創建線程,則可以考慮使用線程池。

經驗分享:

代碼的微優化有很多很多東西可以講,小到一個變量的聲明,大到一段算法。尤其在代碼Review的過程中,可能會反復審查代碼是否可以優化。不過我認為,代碼的微優化是非常耗費時間的,沒有必要從頭到尾將所有代碼都優化一遍。開發者應該根據具體的業務邏輯去專門針對某部分代碼做優化。比如應用中可能有一些方法會被反復調用,那么這部分代碼就值得專門做優化。其它的代碼,需要開發者在寫代碼過程中去注意。

責任編輯:張葉青 來源: 技術博客
相關推薦

2013-02-20 14:32:37

Android開發性能

2022-07-15 13:01:13

Kotlin編程語言Java

2013-09-16 16:56:09

AndroidBitmap內存優化

2013-09-16 15:42:00

Android優化界面UI

2013-09-16 15:33:28

Android優化界面UI

2013-09-16 15:50:04

Android優化界面UI

2021-07-29 14:20:34

網絡優化移動互聯網數據存儲

2017-12-23 14:38:41

Android編程開發優化

2024-12-10 00:00:10

MySQLJOIN算法

2011-06-14 11:14:10

性能優化代碼

2019-12-13 10:25:08

Android性能優化啟動優化

2017-07-26 13:56:26

Android權限優化

2011-11-02 17:17:06

jQuery

2013-09-17 10:32:08

Android性能優化數據庫

2017-01-15 15:13:37

Android性能優化優化點

2011-06-22 17:11:18

SEO

2013-09-16 16:48:50

Android優化軟引用

2017-01-19 15:27:24

Android性能優化Lint

2021-08-03 16:35:04

AndroidANR內存

2011-06-20 14:44:49

網站優化
點贊
收藏

51CTO技術棧公眾號

欧美一区二区三区婷婷| 成人小说亚洲一区二区三区| 成人亚洲一区| 欧美久久久久久久久| 大桥未久一区二区| 天天操天天舔天天干| 日本色综合中文字幕| 超碰日本道色综合久久综合 | 久久99热国产| 久久久久久亚洲精品中文字幕| 欧美亚一区二区三区| 91精品国产色综合久久不卡粉嫩| 精品毛片三在线观看| 一区二区三区免费看| 日本美女一级视频| 久久激情综合网| 97精品一区二区三区| 国精产品一区一区| 日韩欧美美女在线观看| 91麻豆精品国产91久久久久久| 激情五月宗合网| a级网站在线播放| 国产日韩欧美综合一区| 国产有色视频色综合| 国产乱色精品成人免费视频| 久久综合伊人| 午夜精品一区二区三区av| 中文字幕乱码av| 一区二区导航| 亚洲成人黄色网| 在线一区二区不卡| 国产一区二区三区影视| 欧美日韩国产色| 黄色网络在线观看| 天堂аⅴ在线地址8| 26uuu亚洲| 国模一区二区三区私拍视频| 国产一区二区网站| 日韩中文字幕1| 欧美中文在线免费| 国产系列精品av| 欧美a级在线| 久久九九亚洲综合| 东方伊人免费在线观看| 国产精品亚洲人成在99www| 亚洲成人av中文字幕| 色悠悠在线视频| eeuss鲁片一区二区三区| 91精选在线观看| 色乱码一区二区三区在线| 日韩电影av| 色婷婷久久综合| 久久成人免费观看| 五月天国产在线| 日韩欧美国产免费播放| 亚欧无线一线二线三线区别| 中老年在线免费视频| 午夜成人在线视频| 波多野结衣家庭教师在线| gay欧美网站| 一本色道久久综合亚洲精品按摩| 成人毛片视频网站| 亚洲欧美se| 在线免费不卡视频| 激情五月俺来也| 国产精品1区在线| 日韩天堂在线观看| 国产视频久久久久久| 麻豆成人入口| 亚洲一级免费视频| 黄色裸体一级片| 亚洲天堂免费| 午夜精品久久久久久久男人的天堂 | 亚洲国产一二三| 妞干网在线视频观看| 涩涩av在线| 欧美午夜电影一区| 男女视频在线观看网站| 粉嫩久久久久久久极品| 亚洲欧美国产高清va在线播| 亚洲天堂最新地址| 你懂的亚洲视频| 性欧美xxxx| 亚洲欧美日韩一区二区三区四区| 九一九一国产精品| 国产不卡一区二区在线观看| 久久经典视频| 亚洲女子a中天字幕| 日本午夜激情视频| 欧美黄色成人| 亚洲国产小视频在线观看| 国产精品高清无码在线观看| 午夜久久免费观看| 91高潮在线观看| 91激情在线观看| 99九九99九九九视频精品| 亚洲欧美日韩国产yyy | 亚洲精品视频在线看| 国产欧美日韩网站| 国产精品99久久久久久董美香 | 午夜精品久久久| 天天干天天干天天干天天干天天干| 激情综合五月| 亚洲欧美精品一区| 久久久久97国产| 奇米色一区二区| 国产日本一区二区三区| 免费在线观看av片| 色天使色偷偷av一区二区| 久久久久久久久久久影视| 欧美欧美黄在线二区| 欧美高清videos高潮hd| 成人黄色片在线观看| 成人免费av资源| 一区二区精品在线观看| 中文字幕 在线观看| 日韩精品一区二区三区在线播放 | 日韩免费观看视频| 国产xxxxxx| 中文字幕国产一区| 精品视频无码一区二区三区| 97精品久久| 久久黄色av网站| 男人天堂视频在线| 91网站在线播放| 亚洲不卡中文字幕无码| 日韩精品成人| 欧美成人精品h版在线观看| 最近中文字幕在线免费观看| 91色在线porny| 国产一级爱c视频| 伊人久久影院| 欧美成人国产va精品日本一级| 国产又大又粗又硬| 欧美激情一区三区| 丁香婷婷激情网| 亚洲深夜福利在线观看| 欧美亚洲在线播放| 天堂资源中文在线| 天天操天天干天天综合网| 亚洲少妇中文字幕| 欧美片第1页综合| 91传媒免费看| 中文字幕在线观看网站| 欧美一区二视频| 丝袜 亚洲 另类 欧美 重口| 久久97超碰国产精品超碰| 一区二区三区四区免费视频| 国产精品亚洲成在人线| 在线观看欧美成人| 曰批又黄又爽免费视频| 国产精品久久久久久久久快鸭 | av电影一区二区三区| 亚洲一区有码| 欧美剧在线观看| 亚洲春色一区二区三区| 亚洲国产精品自拍| 亚洲最大免费视频| 视频一区二区中文字幕| 五月天亚洲综合情| 亚洲欧美在线人成swag| 欧美精品一区二区免费| 好吊视频一二三区| 黑人巨大精品欧美一区二区三区| a毛片毛片av永久免费| 日韩精品午夜视频| 一区二区成人国产精品| 涩涩屋成人免费视频软件| 欧美激情一级欧美精品| 香蕉视频成人在线| 在线视频国内自拍亚洲视频| 日本女人性生活视频| 国产伦精一区二区三区| 日本a在线免费观看| 激情综合网五月| 91精品在线观| yellow字幕网在线| 亚洲欧美一区二区三区四区| 一区不卡在线观看| 亚洲一区二区三区四区中文字幕| 亚洲欧美日本一区| 麻豆久久久久久久| 69sex久久精品国产麻豆| 国产精品欧美日韩一区| 亚洲japanese制服美女| 国产伦理精品| 日韩亚洲成人av在线| 国产18精品乱码免费看| 在线观看区一区二| 久久久久久久久久久网| 国产亚洲综合色| 国模大尺度视频| 三级在线观看一区二区| 国产91porn| 狠狠色狠狠色综合婷婷tag| 91影视免费在线观看| jk漫画禁漫成人入口| 九九九久久久久久| 岛国在线大片| 亚洲精品一区二区三区蜜桃下载 | 日韩一区不卡| 中文字幕一区二区三区中文字幕| 国产精品久久久久9999| av在线视屏| 北条麻妃久久精品| 免费资源在线观看| 亚洲а∨天堂久久精品9966| 在线免费看av片| 欧美丝袜美女中出在线| 欧美日韩在线视频免费播放| 国产欧美日韩在线观看| 欧美性生交xxxxx| 激情国产一区二区| 精品久久久久久久无码| 国产欧美日韩综合一区在线播放 | 国产露脸91国语对白| 亚洲专区一二三| 国精产品一区一区| 久久综合久久综合久久综合| 日本wwww色| 激情综合色播五月| 91日韩视频在线观看| 国产日韩一区| 人妻av无码专区| 欧美一区网站| 熟女视频一区二区三区| 欧美亚洲国产一区| 欧美一区免费视频| 欧美电影在线观看免费| 国产91精品入口17c| 精品中文字幕一区二区三区| 国产欧美精品在线播放| 欧美xnxx| 国产成人精品久久| 暖暖成人免费视频| 欧美夜福利tv在线| 欧美xxxhd| 26uuu另类亚洲欧美日本老年| 成人高潮aa毛片免费| 欧美黄色成人网| 性欧美高清come| 九九久久精品一区| 在线三级电影| 欧美黑人巨大精品一区二区| 人妖欧美1区| 久久6精品影院| 日韩另类在线| 国内外成人免费激情在线视频网站| av软件在线观看| 欧美人与物videos| 97天天综合网| 91成人精品网站| 手机看片久久| 国产精自产拍久久久久久| 国产一区精品福利| 91九色视频在线| 亚洲精品一区二区三区中文字幕| 51国产成人精品午夜福中文下载| 日韩精品中文字幕吗一区二区| 成人av免费电影| 成人在线超碰| 免费在线一区二区| 精品国产一区二区三区小蝌蚪| 亚洲高清乱码| 欧美伊人影院| 欧美 日韩 国产 高清| 校园春色综合网| 网站一区二区三区| 国产精品一区免费在线观看| 四虎国产精品免费| 91美女片黄在线观看| 日本成人午夜影院| 亚洲人妖av一区二区| 国产大片aaa| 91久久一区二区| 国产乱人乱偷精品视频| 亚洲第一av在线| 国产私人尤物无码不卡| 久久精品亚洲94久久精品| 丰满的护士2在线观看高清| 热re99久久精品国产66热| 美女久久久久久| 国产精品免费在线播放| 国产探花在线精品| 国产日韩第一页| 一本色道精品久久一区二区三区| 国产精品入口免费软件| 国产成人av一区二区三区在线观看| 欧美大片免费播放器| 中文字幕日韩av资源站| 亚洲天堂日韩av| 欧美精品v国产精品v日韩精品| 空姐吹箫视频大全| 中文字幕无线精品亚洲乱码一区 | 欧美在线视频免费| 国内自拍亚洲| 国产亚洲二区| 国产精品88久久久久久| 每日在线更新av| 国产米奇在线777精品观看| 午夜理伦三级做爰电影| 亚洲美女精品一区| 中文字幕一区二区人妻视频| 日韩免费看网站| jizz视频在线观看| 午夜精品蜜臀一区二区三区免费| 日韩在线激情| 秋霞久久久久久一区二区| 国产精品黄色| 激情文学亚洲色图| 久久久久99精品国产片| 久久久久久久中文字幕| 欧美日韩高清一区| 欧美在线观看在线观看| 欧美激情乱人伦一区| 欧美伊人亚洲伊人色综合动图| 欧美日韩大片一区二区三区 | 久久久久久久久网站| 日韩久久99| 台湾成人av| 乱人伦精品视频在线观看| 扒开伸进免费视频| 亚洲天堂福利av| 亚洲无码久久久久久久| 亚洲欧洲午夜一线一品| yellow字幕网在线| 国产高清一区视频| 亚洲国产精品日韩专区av有中文| 97公开免费视频| 久久精品一区二区三区不卡牛牛| 国产乡下妇女做爰视频| 精品少妇一区二区| 超碰免费在线播放| 国产一区二区在线播放| 欧美午夜精彩| 999在线免费视频| 日本一区二区三区国色天香| 麻豆精品久久久久久久99蜜桃| 亚洲国产精品免费| av日韩中文| 国偷自产av一区二区三区小尤奈| 激情欧美国产欧美| 中文字幕制服丝袜| 亚洲综合一区二区| 性一交一乱一色一视频麻豆| 欧美日韩xxxxx| jazzjazz国产精品麻豆| 福利视频一二区| av不卡在线观看| 国产一区二区99| 日韩精品中文字幕有码专区| 日韩在线伦理| 日韩精品福利视频| 日韩av一级片| 免费黄色激情视频| 91精品黄色片免费大全| 3d玉蒲团在线观看| 国产精品久久久久av福利动漫| 亚洲高清二区| 亚欧洲乱码视频| 欧美性受极品xxxx喷水| 日本高清中文字幕在线| 亚洲影院色无极综合| 亚洲一级网站| 精品无码人妻一区| 欧美性受xxxx| 黄色在线播放网站| 国产91亚洲精品一区二区三区| 亚洲国产三级| 欧美老熟妇乱大交xxxxx| 欧美最猛性xxxxx直播| 免费网站免费进入在线| 97se亚洲综合| 国产精品呻吟| 国产又粗又长又硬| 欧美tickling网站挠脚心| 韩国成人二区| 一区二区三区电影| 成人丝袜高跟foot| 狠狠狠狠狠狠狠| 美女性感视频久久久| 久久久久97| 狠狠操狠狠干视频| 亚洲福中文字幕伊人影院| 欧美色综合一区二区三区| 国产一区二区在线免费| 精品99视频| 久久久99999| 亚洲成人性视频| 欧美成人xxxx| 欧美视频在线观看网站 | √天堂中文官网8在线| 亚洲国产精品va在线看黑人动漫| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲人成网站在线播放2019| 国产69精品一区二区亚洲孕妇| 久久久久久久亚洲| 欧美极品少妇xxxxⅹ裸体艺术| 欧州一区二区| 日韩少妇一区二区|