android應用開發 網絡編程與常見功能優化總結

通常的應用都是從服務器獲取數據,而後經過極致的界面風格,將數據清晰,明朗的展示給用戶。、
那麼就能夠分爲這兩塊:
1.界面UI   追求極致
2.功能
  2.1獲取數據:主要是與服務器通訊,那麼就要涉及到網絡編程 :
     2.1.1  URlConnection 
  2.1.2  HttpURLConnection(post get)
  2.1.3  Socket
  2.1.4  HttpClient(post get)
  2.1.5  WebService(本身拼裝請求xml 數據,採用開源jar包 ksoap-android-)
  
  2.2網絡通訊的時候,採用的異步數據獲取
     2.2.1   AsynTask android 封裝好的異步數據獲取,包括三個方法
         doInBackground 執行在子線程中的異步方法
         onProgressUpdate 數據獲取以後 執行的方法,在主線程中能夠在這裏更新UI界面
         onPostExecute   異步方法執行前,能夠進行界面友好提示 在主線程中執行的方法
     2.2.2  本身封裝一個任務類(子線程)thread   採用線程池 這裏須要本身維護一個任務列表,而且作到任務的優先級
 
  2.3 android優化 最多見的就是listview 的大數據優化  圖片優化  訪問網絡的優化
     2.3.1 優化的原則: 數據延遲加載  分批加載  本地緩存
  2.3.2 listview 數據優化 複用contentview  
                          建立static class ViewHolder
                          分批加載 滑動監聽 或者按鈕  顯示更多數據  往下拖動 顯示
       
     2.3.3 listview 圖片優化  異步加載  
                              本地緩存(二級緩存  內存(軟引用實現),sd卡)  
         快速滑動時不顯示圖片
         分爲核心線程池和普通線程池,下載圖片等耗時任務放置在普通線程池
  2.3.4 超級大胖子Bitmap
        及時的銷燬(Activity的onDestroy時將bitmap回收,
        在被UI組件使用後立刻進行回收會拋RuntimeException:
        Canvas:tryingtousearecycledbitmapandroid.graphics.Bitmap)
        設置必定的採樣率(有開發者提供的圖片無需進行採樣,
        對於有用戶上傳或第三方的大小不可控圖片,可進行採樣減小圖片所佔的內存),
        從服務端返回圖片,建議同時反饋圖片的size巧妙的運用軟引用drawable對應resid的資源,
        bitmap對應其餘資源任何類型的圖片,若是獲取不到(例如文件不存在,或者讀取文件時跑OutOfMemory異常),
        應該有對應的默認圖片(默認圖片放在在apk中,經過resid獲取);
     2.3.5 Drawable
         ui組件須要用到的圖片是apk包自帶的,、
         那麼一概用setImageResource或者setBackgroundResource,而不要根據resourceid
         注意:get(getResources(),R.drawable.btn_achievement_normal)該方法經過resid轉換爲drawable,
         須要考慮回收的問題,若是drawable是對象私有對象,在對象銷燬前是確定不會釋放內存的。
         
 2.3.6 訪問網絡優化
                              設置超時時間,採用壓縮流 傳送數據 
2.3.7  內存優化,static是Java中的一個關鍵字,當用它來修飾成員變量時,那麼該變量就屬於該類,而不是該類的實例。因此用static修飾的變量,它的生命週期是很長的。                     優化方法:在一個工程中集中管理這些靜態常量                 儘可能避免static成員變量的使用,          使用SoftReference或者WeakReference代替強引用      儘可能避免在一個activity裏面寫線程內部類:      線程是Activity的內部類,因此Thread中保存了Activity的一個引用,當run函數沒有結束時,Thread是不會被銷燬的,      所以它所引用的老的Activity也不會被銷燬,當這些activity加載了不少資源,沒有釋放也就很容易出現了內存泄露      的問題。      Android提供的AsyncTask,但事實上AsyncTask的問題更加嚴重,Thread只有在run函數不結束時纔出現這種內存泄露問題,然而AsyncTask內部的實現機制是運用了      ThreadPoolExcutor,該類產生的Thread對象的生命週期是不肯定的,是應用程序沒法控制的,      所以若是AsyncTask做爲Activity的內部類,就更容易出現內存泄露的問題。      那麼就本身寫一個線程類,管理這些任務。
相關文章
相關標籤/搜索