1. 程式人生 > >android開發的一些經驗(轉載,自己看看)

android開發的一些經驗(轉載,自己看看)

前言: 很早以前,就聽人說過android以後會火起來,作為一個前瞻性對它有所瞭解會是一個轉型的好機會,javaweb太成熟飽和了,現在市面上各種android手機層出不窮,網上各種android視訊連續劇一樣跟進,安卓一下子成為了熱門話題,剛開始也是出於個人興趣學的很hi感覺挺容易上手的樣子,後來工作中才發現問題很多也很棘手,慢慢的在糾結和痛苦中琢磨出了一些經驗和規律!

1.android作為view層,要實現和服務層低耦合,必須使用webservice介面,目前還沒有十分完善的外掛,曾經試過axis的android包(也是一個興趣者自己做的),用了之後感覺非常麻煩,特別是複雜資料型別的傳遞,而且bug也很多,還要改別人原始碼,無疑增加團隊的學習成本和開發難度,無奈之下自己做了,android端使用Apache的httpclient傳送互動請求,定義好xml介面傳輸資料,接收也是用dom4j解析,經測試在2.2中dom4j支援性很好,2.1少些解析用法不支援,但大部分能用,說到這大家也許懂了,沒錯後端用的是servlet機制,再利用java反射根據xml檔案描述動態呼叫指定的spring服務和方法,這些已經足夠,而且可以完全按自己的方式做更多靈活的擴充套件.

2.httpclient確實是個好東西,但作為無狀態訪問協議,http無法儲存使用者會話資訊,於是翻開了axis的原始碼發現它原來時把使用者的首次訪問資訊儲存至特定檔案,而後根據心跳機制,定時做校驗,茅塞頓開,於是我把使用者首次訪問資訊儲存在資料庫會話表中,並且寫了一個儲存過程,定時把會話中登入時間距離當前時間超過30分鐘的記錄做刪除操作,使用者每次登入都與會話表進行匹配,沒有記錄即刻超時強退,這麼一來,方便簡單多了,那麼使用者每次訪問系統都得在xml檔案裡帶著系統給它的串號,也就是sessionid,才叫一次完整的會話.

3.android系統畫圖是個麻煩的活,初期我們小組找遍了所有畫圖的外掛,都是憂喜過半,沒有辦法找到特別滿意的,要麼是使用太麻煩,要麼是找不到我們要的效果,研究的很累也沒頭緒,問了一些原先做過j2me老程式設計師,他們建議如果不是專業做遊戲的話,統計圖表這些還是藉助服務端來做更合適一點,於是我們拋棄了所有的android端畫圖外掛,採用jfreechart在服務端畫好,圖片http流到手機端顯示,當然因為2.1系統不支援flash,也就沒考慮在做得更漂亮,圖表很直觀很清晰.

4.UI是個難點,而且為了適應不同解析度,之前用px單位很有問題,後來改了dip定位,好了許多,之後大面積使用選項卡樣式,統一風格,難點很多,比如給tabhost加樣式動態改變效果,按鈕透明,listview去橫線加箭標加動態發亮加下拉翻頁,還有手勢滑動,各種各樣的widget特效和動畫切屏,為了省去彎路,我們反編譯了QQ,飛信,58,趕集,飛機票,墨跡天氣等所有主流的android佈局和美化的用法,吸取不少有用的經驗,但是依然感覺佈局很難做,美工無法直接介入而且模擬器測試很不給力,沒辦法只能用真機測ui,速度能快上許多.

5.android的客戶端更新功能,相信只有做過的才知道其中的辛酸,一要做好斷點續傳,二要做好資料庫的初始化工作,三要做好籤名,四要做好版本校驗的演算法並且能顯示動態進度條和百分比,斷點續傳好做,但是資料庫初始化麻煩點,我們的做法是把sqlite庫檔案直接從raw下拷貝至sd卡中,並設定了sqlite的讀取庫路徑指向它,感覺這樣好一點,簽名一開始不知道,每次覆蓋都提示安裝未完成,後來才明白為了保證應用的唯一性,它就像是身份證一樣,其他沒什麼作用,和塞班的簽名不是一回事,封裝apk必須保證在同一簽名檔案下才可相互覆蓋安裝!

6.webview中可以呼叫後端的java程式碼,類似dwr功能,不過這個功能一直用的很少,很不穩定,相容性要考量,android既然提供了那麼多的ui控制元件,就說明webview是無法替代它的,畢竟還需要呼叫底層服務,webview還是慎用的好.

7.android也應該遵循mvc的程式設計規範,activity只負責處理跳轉,UI,和簡單資料校驗工作,業務邏輯放置在service類中,sqlite操作稍加封裝下,做個類似jdbcUtil的那種模板類,提供增刪改查,分頁等方法,這樣dao操作就完善許多,我想作為java程式設計師轉做android開發,最大的障礙不在框架也不在谷歌sdk中的那些api,而是java基礎,通過寫程式發現,做手機開發的程式設計師,基本素質要過硬,尤其在集合,執行緒,異常,io,http這些要非常透徹,不然一個看似很簡單的功能,可能就會寫的bug百出,甚至效率很低,可讀性差,基本上自己回過頭都看不懂自己寫的是什麼,對介面和抽象類,包括匿名內部類的寫法也要爐火純青,熟悉類包的基本結構,及時對自己完成的功能做程式碼上的優化和重構,讓自己和別人讀起來像讀詩歌一樣,清晰優美,它不像web框架那麼成熟,大家都用ssh,都很有規範可循,照著畫一般也看不出個人功底來!我想說的是想做android開發的程式設計師,要特別留意java基礎!

8.另外地圖導航也是一個亮點,現在不管做什麼功能都會用到地圖導航,吃喝玩樂,使用者都想知道在什麼地方,目前百度谷歌都推出了android的地圖介面,我們用的是arcgis,好在api不多應用也很簡單,官方都有現成例子,讓我這個arcgis是兩把刷子的人都能糊上交差.

9.寫android程式碼最大的糾結是測試找bug,模擬器很慢,不管修改什麼地方,都要重編譯部署,ADT外掛經常發生debug失效的情況,想加速開發,首先要將eclipse自動編譯關掉,把模擬器中沒用的程序殺掉,再把一些沒用的手機特效關掉,模組化開發,這樣便於將整個方法體切出來放進junit裡測試,有一款叫Youwave_Android模擬器,使用速度非常快,如果實在沒有真機的情況下可以用它來過渡下,沒事還可以多下載些android軟體,學習下別人的系統是怎麼做的,至少能提高下UI審美,有人提議在linux平臺上開發,如果從未使用過最好先別給自己加難度,實在想試推薦使用ubuntu10中文桌面版,雖然速度上是沒感覺到快多少,但是確是個逐步鍛鍊提升自己的好機會,技多不壓身!

10. 有些小技巧是挺實用的,一些adb命令肯定要比用adt外掛要快,新版的sdk升級包把它放在了platform-tools目錄下;模擬器橫豎切屏有快捷鍵ctrl+F11或者小鍵盤home;如果你debug失靈了嘗試在DDMS裡把程序殺掉部署重試,如果還不行就只有重啟模擬器了;如果突然發現gen目錄下怎麼也不生成R.java檔案了,那就show problems看看工程是不是有error,一般不是包路徑有問題就是程式內部佈局檔案有錯誤,如果仍然無效,關閉eclipse重新開啟就好了,有時候adt就會出現這樣的bug;adt外掛和sdk升級包是有版本依賴的,如果使用的是8.0以上的adt外掛,記住的sdk升級包一定用最新的,否則會報找不到adb命令的錯誤,不要茫然就升級外掛,最新10的外掛只能在3.5以上的eclipse上執行,而且它並沒有帶來多大驚喜,只是支援更高sdk版本罷了;android程式本身也有缺陷,千萬不要鑽太深和它較勁,走不過去的地方就想其他路繞,只要簡約樸實不俗套,程式功能健壯就可以;另外多加幾個android開發者論壇社群下原始碼發帖求助,技術這東西,無他,唯手熟爾!