忽略之前小打小鬧,這個項目算是我的第一個項目--SCNU的網路公選課的android版本的用戶端。項目是從5月中旬開始的,中間經曆了幾個星期的複習考試時間,到現在可以說是完工了吧(或許還有寫細節要修改)。這個項目帶給我蠻多的經驗,包括android開發及其它,所以有必要寫寫總結。
項目的故事版是另外一個負責iphone版本的同學設計的,所以介面就有仿照iphone的樣子,其實正如kinfey(boss)說的,一個項目的不同平台還是要有自己平台的特性,所以下個項目不同平台就會有不同的故事版。項目的具體功能是實現學生、教師、管理員都可以通過移動app實現相關操作,可以看視頻、看論壇、發帖、回複、看作業、看統計...相關總結如下:
1、故事版
所謂故事版就是項目的整個設計圖,具體包括整個介面初型。其實故事版是kinfey保留的習慣,我覺得這對於整個項目的實施時有好處的。有了故事版,就清楚了整個項目的功能邏輯,這樣不會是在開發中混亂功能需求;其次,故事版也利於整個項目技術痛點的掌握。
2、一程式猿一美工
這也是kinfey的工作習慣。這種模式對於項目不是很大的項目還是不錯的,因為他給程式猿夠大的自由度,能更好的把握全域。所以這個項目的android及iphone用戶端就三個人,兩個程式猿,一個美工。
3、全域觀
這次項目因為要做學生、教師、管理員三個角色都可以使用的用戶端。因為三者介面是相似的,所以一開始就像先實現學生端的,但是在後來想加例外兩個的時候,但是很多命名都是命為學生的,不符合命名規範,所以要取改,這是很煩人的活,因為很容易出錯。
4、android的多解析度問題
這也是項目中比較棘手的問題,一開始因為沒想好怎麼解決,所以導致美工做了無謂的工作。其實一套圖是可以解決的:只叫美工設計一套高解析度的圖,然後所有的圖都要按比例縮放。網院的彭老師的經驗:保持你的圖在父容器中的相對位置不變。其實就只有一句話,保持比例不變。只有這樣,圖片才不會變形。(相關可參照android:螢幕自適應)
5、關於tab內的多視圖跳轉
這個也困擾了我近2天,問題是這樣的:android的tab在跳轉時下面的tab bar 會消失,其實是轉到了其它的activity,離開了tab,沒有iphone的tab的跳轉的樣子,最後的解決是使用Tabhost+Fragment ,Fragment是3.0之後的新特性,其原始目的是實現分頁的效果,如同iphone的splitView,不過可以利用它來管理Fragment。實現一開始提到的效果,具體可以參照:Android Tabhost with FragmentActivity
6、gson
這次解析json的是用到gson庫。還蠻好用的,注意解析時的Model只要所需的資料就行,不用全部,一開始以為要全部都設的,一大堆get set.....
7、MVP
MVC大家一定不會陌生,model view controller。而MVP的模式則是MVC的改進,view與model的互動要通過Presenter。這種模式也是與kinfey之間的“約定”。使用此模式,這個程式是層次分明的,開發感覺有點像iphone的一個View對應一個Controller的感覺。結構分明了,各種事情都會好辦很多,發現問題也快很多。相關可參照
http://jamespeckham.com/blog/10-11-21/MVP_on_Android.aspx 裡面會有提到一個樣本模板,照做就行,其優雅還是在應用到項目中才會體會到。
8、非同步
iphone中的非同步使用gcd可以實現。原以為android的要自己管理線程類,所以覺得很麻煩。後來發覺原來沒有這麼沒“人道”,哈哈,android的非同步是使用AsyncTask來實現的。非同步是後來才加的,操作起來是比較簡單的。這有部分是MVP模式的功勞。
9、activity棧及程式退出
程式要注意返回Button和物理返回鍵的邏輯統一。這就要對activity棧有相關的理解。同樣 程式的退出也於此有關,現在實現的是通過全域變數的方式去解決,但總感覺此方法不是很優,需找其它解決方案吧。
程式以為有簽保密協議,是不能貼上來的,不過可以貼貼幾張圖......美工老師蠻給力的哦!
(是在模擬器截的,所以tab顯示不太正常,本來是有字顯示的)
總結至此,繼續加油,MYBKN!