天天看點

Android 經驗分享

      搞Android已經兩年了,之前一直在eoe上面寫文章,竟然沒有寫一篇CSDN的文章,真的很慚愧,從今天希望自己可以堅持下去,把每天的收獲都可以儲存起來,同時也分享給大家,希望大家有用!不說廢話了,我先寫幾條我自己工作中的一些經驗吧!

       1、  推薦一個網站---極客學院(http://www.jikexueyuan.com/),裡面推出了一系列的視訊教程(移動應用開發,移動遊戲開發,後端開發,前端開發,智能硬體,物聯網,作業系統,資料庫,圖像技術等的),包含了當下最新的技術,最實用的是裡面講了很多知識體系歸納和一些項目實戰講解,有些問題可以直接在極客學院裡面的論壇或者社群進行讨論(eoe社群),當然裡面視訊并不是全部免費的。

     2.異常處理機制的使用。寫一個異常處理類implement UncaughtException,可在Application中初始化這個類,這樣在全局中我們便能得到應用程式抛出的任何異常,并可将這個異常以流的形式列印或者儲存在本地,在适當的時候,如果我們用友盟做資料統計了,可以将我們的錯誤資訊上傳至伺服器,來統計我整個應用的穩定性。

    3.BaseActivity的使用。在應用開發中,如果有多個Activity,應該寫一個BaseActivity,在BaseActivity裡面可封裝跳轉頁面的方法,Toast的方法,彈出對話框的方法,标題的操作公共方法,其他Activity繼承此BaseActivity即可。

   4.Android記憶體優化。Android記憶體洩露很容易導緻記憶體溢出,我們稱之為OOM,我有這樣的一些記憶體優化政策,1)在循環中盡量不要使用局部變量 2)不用的對象把它置為null 3)資料庫的cursor及時關閉4)建構adapter時候要使用緩存contentview 5)調用registerReceiver()注冊廣播時别忘記在相對應的生命周期方法裡面調用unregisterReceiver() 6)及時關閉輸入流和輸出流7)多張圖檔盡量使用Lrucache或者軟應用,較大的圖檔可以通過BitmapFactory縮放之後再使用,注意recycle.  8)盡量避免static變量引用資源耗費過多的執行個體。

      5.Android緩存機制。使用緩存機制可以為使用者節省更多的資料流量,同時在使用者體驗上面也會很好,當第一個加載過後,第二次會相當流暢,緩存主要包含文字緩存和多媒體緩存(圖檔,視訊),文字緩存,1)可将從伺服器上得到的json資料或者xml資料先儲存到sd卡中,并在資料庫中添加記錄,注意需要添加兩個關鍵字段,一個是請求的url,一個是本地儲存的路徑,每次加載資料之前先根據url檢索是否存在,若存在直接從sd卡取出。2)可先将資料解析出來,全部寫入資料庫,以後向伺服器發請求之前先從資料庫檢索,然後直接傳回集合等形式。圖檔緩存,同文字緩存第一種相似,采用目前時間+日期作為圖檔的名字進行緩存,并儲存相應的資料庫記錄,從伺服器取出之前先檢索資料庫。有一個問題,緩存了這麼多圖檔和文字,如何删除這些緩存呢,1)在頁面提供删除緩存的按鈕,點選删除,可删除所有的緩存内容  2)在每一個用戶端手動更新或者自動更新時候,删掉原來所有的緩存檔案,重新下載下傳新的檔案進行緩存。

      6.ANR避免,在一些網絡通路中或者很耗時的操作中都會很容易造成ANR,當一個事件的響應時間超過5秒,intentReceiver(意向接收器)超過10秒仍未執行完畢,就會引發ANR了,它有這樣的幾種解決方案:1)AsyncTask異步任務,在異步任務裡面doInBackground()和onPostExecute(Result)兩個方法非常重要,doInBackground()這個方法運作在背景線程中,主要負責執行那些很耗時的操作,如一通路網絡,下載下傳大量資料,解析xml時,這個方法必須重載。onPostExecute(Result)這個方法運作于UI線程中,在doInBackgroud(Params…)方法執行完畢之後調用,主要用于重新整理UI的操作,中的參數Result即背景任務做完之後帶回來的結果。2)Thread+Handler, 說到這裡了,不得不提一下Handler機制,一個Handler允許你發送和處理Message和Runable對象,每個線程都有自己的Looper,每個Looper中都封裝着MessageQueeue(消息隊列),Looper主要是負責不斷的從自己消息隊列裡面取出隊頭的任務或消息執行。每個Handler也和線程互相關聯,Handler負責把Message和Runable對象傳遞個MessageQueeue(用post或者sendMessage等方法),而在這些對象離開MessageQueeue的時候,Handler負責執行它們(用handlerMessage方法)。其中Message就定義了一個資訊,這個資訊裡面包含了一個描述符合任意類型的資料對象,這個資訊被用來傳遞Hnadler.Message對象提供額外的兩個int域和一個Object域。

      7.螢幕分辨率的自适應。現在市場上的android手機分辨率可以說是參差不齊,開發過程中,很容易遇到适配的問題,易導緻效果在不同的手機上效果不一樣,我們可以用兩種方式進行不同手機的适配,一種是在java代碼中,另外一種就是在xml檔案中,第一種java代碼适配,在我們适配上,雖然有着不同分辨率的手機,但他們都有固定的屏高和屏寬,可以根據寬高作為判斷條件,但這種方式,要看适配的布局中,各種控件多不多,如果太多,并不适合用這種方法,因為判斷太多,代碼顯得很長,在修改過程中,也顯得很麻煩,是以我們一般的還是采用第二種方案,在xml裡面适配時候,最好可以通過權重(layout_weight)的方式來配置設定每個元件的大小,也可以通過具體的像素(dip)來确定大小,在布局中我們通常喜歡使用線性布局(LinearLayout),而在布局中最好使用相對布局(Relativelayout),當然相對布局寫起來比較麻煩一點,需要考慮到自己所有控件的布局,放置圖檔有drawable-hdpi,dreawable-mdpi,drawable-ldpi分别代表分辨率480*800,360*480,240*360,放置圖檔相差1.5倍,如果需要自适應,需要在AndroidMainfest.xml檔案裡面加入這一段。

<supports-screens

      android:smallScreens="true"

      android:normalScreens="true"

      android:largeScreens="true"

      android:anyDensity="true"/>

在使用圖檔的時候,.9.png也是可以實作自适應的。制作.9.png圖檔可通過ps制作,也可通過sdk下的tools工具進行制作。

    8.android5.0新技術。新的技術總是不斷更新疊代的,5.0不僅從設計還有技術上面都有了很大的改變,它帶來了一種全新的Material Design設計風格,即一種扁平化的設計,看起來更

加的時尚,使用者的體驗更好了(http://www.uisdc.com/comprehensive-material-design-note),

新特性位址:http://www.tuicool.com/articles/RzUJRfj;這是android5.0的一些新的特性,那麼這些新的特性之後也包含了一些新的技術, 1)包含了Material主題,它主要提供了可以讓你設定調色闆的系統控件,為控件設計的觸摸回報動畫,Activity過渡動畫。2)Palatte,是一種動态色彩,可以根據圖檔來決定标題的顔色和标題欄的背景色,在視覺上會更有沖擊力和新鮮感,而不是統一的色調,顯得很呆闆。3)AnimatedVectorDrawable,這個主要的作用是可以在做動畫的時候使用到,它最大的特點是可以在不失清晰度的情況下進行縮放,而你僅僅隻需要一個矢量圖檔(矢量圖是根據幾何特性來繪制圖形,矢量可以是一個點或一條線,矢量圖隻能靠軟體生成,檔案占用内在空間較小,因為這種類型的圖像檔案包含獨立的分離圖像,可以自由無限制的重新組合。它的特點是放大後圖像不會失真,和分辨率無關,适用于圖形設計、文字設計和一些标志設計、版式設計等)的資源檔案。4)RecyclerView,它是一個可以替代ListView的新的控件,也可以說它是listview的更新版,它比listview更先進更靈活,主要展現在:首先它給每個條目位置提供了一個布局管理器(RecyclerView.setLayoutManager),其次它為每個條目設定了操作動畫(RecyclerView.setItemAnimator)5) 動畫:第一中是Activity的過渡動畫,包含進入,退出,共享元素,可在xml檔案中配置,也可以在代碼中配置。第二種就是觸摸回報,揭露效果,曲線運動,視圖狀态改變,觸摸回報(http://blog.csdn.net/ljx19900116/article/details/41806917)。

    第一次在這上面寫文章,希望大家可以多多支援!

繼續閱讀