通常的應用都是從服務器獲取數據,而後經過極致的界面風格,將數據清晰,明朗的展示給用戶。、
那麼就能夠分爲這兩塊:
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的內部類,就更容易出現內存泄露的問題。 那麼就本身寫一個線程類,管理這些任務。