項目總結:華南師范大學校園開發教育android客戶端總結

? ? 忽略之前小打小鬧,這個項目算是我的第一個項目--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!

?

?

?

?

?

?

?

?

?

?

轉載于:https://www.cnblogs.com/mybkn/archive/2012/07/14/2590743.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

火鳥字幕合并器

火鳥字幕合并器-區塊獨立勾選-保存。漢王 PDF OCR轉載于:https://www.cnblogs.com/hnytwn/archive/2009/10/31/1593395.html

Linux系統編程---守護進程

1 守護進程的概述 Daemon(守護進程)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期性地執行某種任務或等待處理某些發生的事件。它不需要用戶輸入就能運行而且提供某種服務,不是對整個系統就是對某個用戶程序提供服務。Linux系統的大…

c ++明明的隨機數_從列表C ++程序中隨機建議電影

c 明明的隨機數Problem statement: 問題陳述: Write an application code that will suggest movies from a list randomly and there wont be any repeat while suggesting the movies. That means the same movie wont be suggested twice though it will be don…

郵箱服務器

一.郵箱服務器的基本概念 郵件的客戶端:可以只安裝在電腦上(C/S)的也可以是網頁形式(B/S)的 郵件服務器:起到郵件的接受與推送的作用 郵件發送的協議: 協議:就是數據傳輸…

C#提高保存jpg圖像的質量

在程序中直接生成的jpg圖像,漢字有毛邊,經過一番搜索,在msdn上發現了下面控制jpg質量系數的文章,修改后試了一下,效果確實比前面強多了。原理我也不大懂,把代碼貼出來,與大家共享。 聯合圖…

延遲和定時器管理

文章目錄1 內核中時間概念2 標準定時器jiffies和HZ定時器API標準定時器案例3 高精度定時器(HRT)高精度定時器案例4 內核中延遲和睡眠原子上下文非原子上下文1 內核中時間概念 時間概念對計算機來說有些模糊,事實上內核必須在硬件的幫助下才能計算和管理時間。硬件為…

Web開發工具(插件)收集

1.IE Developer Toolbar 瀏覽和修改,選定Web頁上的特定元素,查看HTML對象的類名、ID,以及類似鏈接路徑、tab順序、快捷鍵等。 2.HttpWatch Professional 一款強大的網頁數據分析工具,可以查看當前網頁的http數據 FireFox插件 FireFox下插件實…

cin、cin.get()、cin.getline()、getline()、gets()等函數的用法

轉載,并經過本人補充cin、cin.get()、cin.getline()、getline()、gets()等函數的用法2007/10/27 22:51學C的時候,這幾個輸入函數弄的有點迷糊;這里做個小結,為了自己復習,也希望對后來者能有所幫助,如果有差…

Java StringBuilder subSequence()方法與示例

StringBuilder類subSequence()方法 (StringBuilder Class subSequence() method) subSequence() method is available in java.lang package. subSequence()方法在java.lang包中可用。 subSequence() method is used to return the new set of a character sequence that is a …

Linux設備驅動開發---設備樹的概念

文章目錄1 設備樹機制命名約定別名、標簽和phandleDT編譯器2 表示和尋址設備SPI和I2C尋址平臺設備尋址3 處理資源提取特定應用數據文本字符串單元格和無符號的32位整數布爾提取并分析子節點4 平臺驅動程序與DTOF匹配風格處理非設備樹平臺平臺數據與DT設備樹(DT&…

【轉】C#中數組復制的4種方法

C#中數組復制的4種方法 from:http://blog.csdn.net/burningcpu/article/details/1434167今天旁邊的同事MM叫我調了一段程序,她想復制一個數組,int[] pins {9,3,4,9};int [] alias pins;這里出了錯誤,也是錯誤的根源&#xff0c…

Java StringBuilder codePointAt()方法與示例

StringBuilder類codePointAt()方法 (StringBuilder Class codePointAt() method) codePointAt() method is available in java.lang package. codePointAt()方法在java.lang包中可用。 codePointAt() method is used to return the Unicode code point at the given indices an…

用戶虛擬地址轉化成物理地址,物理地址轉換成內核虛擬地址,內核虛擬地址轉換成物理地址,虛擬地址和對應頁的關系

文章目錄1. 用戶虛擬地址轉換成物理地址2. 內核虛擬地址轉換成物理地址3. 物理地址轉換成內核虛擬地址4 內核虛擬地址和對應頁5 根據進程號獲取進程描述符1. 用戶虛擬地址轉換成物理地址 static void get_pgtable_macro(void) {printk("PAGE_OFFSET 0x%lx\n", PAGE…

簡單三層架構(登錄)

1,首先導包 dao //獲取數據String username request.getParameter("username");String password request.getParameter("password");//傳遞到Service層UserService service new UserService();//這里的UserService 需要創建到service包下Use…

通過隱藏option實現select的聯動效果

開始的時候需求是根據一定條件隱藏一部分<option>標簽&#xff0c;類似聯動效果&#xff0c;但是目前的html規范并沒有為<option>提供隱藏的效果&#xff0c;因此常用的設置display或者visibility無效。網上大部分解決方案是刪除<option>節點或<option>…

Java SimpleTimeZone setEndRule()方法與示例

SimpleTimeZone類setEndRule()方法 (SimpleTimeZone Class setEndRule() method) Syntax: 句法&#xff1a; public void setEndRule(int en_mm, int en_dd, int en_time);public void setEndRule(int en_mm, int en_dd, int en_dow, int en_time);public void setEndRule(int…

Linux設備驅動開發--- DMA

文章目錄1 設置DMA映射緩存一致性和DMADMA映射一致映射流式DMA映射2 完成的概念3 DMA引擎API分配DMA從通道設置從設備和控制器指定參數獲取事務描述符提交事務發布待處理DMA請求并等待回調通知4 程序單緩沖區映射分散聚集映射DMA是計算機系統的一項功能&#xff0c;它允許設備在…

類加載器

一、類加載器 1&#xff0c;什么是類加載器&#xff1f; 類加載器就是用來加載字節碼文件 2&#xff0c;類加載器的種類有哪些&#xff1f; 1&#xff09;BootStrap&#xff1a;引導類加載器&#xff1a;加載都是最基礎的文件 2&#xff09;ExtClassLoader&#xff1a;擴展類加…

一個用java讀取XML文件的簡單方法(轉)

XML文件 book.xml <book> <person> <first>Kiran</first> <last>Pai</last> <age>22</age> </person> <person> <first>Bill</first> <last>Gates</last> <age>46</age&g…

Java ObjectStreamField getName()方法與示例

ObjectStreamField類的getName()方法 (ObjectStreamField Class getName() method) getName() method is available in java.io package. getName()方法在java.io包中可用。 getName() method is used to get the name of this ObjectStreamField field. getName()方法用于獲取…