程序開發經驗總結

軟件開發經驗總結

一開發方面

1.調試軟件的使用的方式的選擇:選擇單步調試還是選擇打Log。

(1)對於容易復現,且能夠單步調試的地方優先選擇單步調試。

(2)對於不易復現,且單步調試無法分析時,那麼選擇打印詳細的Log信息,以便在下一次復現時,通過分析Log來定位。

2.使用Log,並在打印Log的地方使用開關,以便發佈後關閉Log的打印。

在項目開發中,遇到不穩定的第三方庫,一定要使用Log來打印主調API的參數和返回值,也要打印回調的參數值。

3.謹記:在項目開發前期,首要考慮的是性能問題,即軟件的速度問題和內存使用問題,也就是說首先要考慮用戶流暢性的體驗問題。

而不是首先去考慮功能問題,因爲功能通過不同的多種多樣的技術都能夠實現,但是不同的技術實現出的性能問題是不一樣的。

4.謹記:在項目開發前期,同樣要考慮軟件穩定性,即不能讓APP經常Crash掉。

5謹記:在開發過程中在打印日誌或者提示用戶時,不能圖省事直接進行硬編碼,否則到項目後期是一定要去除硬編碼的,一樣的要花時間。

而應該使用成員變量或者在字符串資源中聲明字符串的方式使用。

6. 編程慣用法:使用生產者消費者多線程模型來異步加載數據,注意線程間的同步機制。 
7.編程慣用法:對於Bitmap圖片應該使用緩存機制來加載圖片從而提高app的用戶流暢性體驗和性能。緩存的大小要固定,並且要對緩存使用了LRU策略(least recently used)來釋放圖片,從而解決了Bitmap的OOM問題。 
8.編程慣用法:對於大數據的加載使用了分頁或者分段的原則加載,因爲在屏幕顯示的數據總是隻有那麼幾個,並不需要一次性全部加載到內存中,應該按需去取數據。從而在數據很多的情況下,不影響用戶的流暢體驗。

9.用戶在快速的滑動過程中,先不要去加載數據,只有當用戶手勢停下來了再去加載數據,因爲在快速滑動中的數據,其實並不是用戶想看到的。

10.關於函數實參到形參傳值的理解。

(1).函數和變量一樣也是需要空間來存儲的。
(2).函數的參數傳遞要用函數棧來理解。函數調用前要把先前的東西入棧,調用後要把先前的東西出棧。故函數的參數傳遞只能傳值。不同的是可以傳遞參數本身的值,如基本數據類型。也可以傳遞實際參數本身的地址的值,這個針對類的變量。穿地址值給人的感覺像是傳遞引用,其實還是傳遞的是地址值。這時改變形參接收到的地址值是不會導致實參的地址值發生改變的。但如果改變形參接收到的地址值所指向的對象的值,那麼就會導致實參所指向的對象值也會發生改變。這也給人的感覺是傳引用。傳地址值的好處就是減少實參到形參的內容拷貝的時間和空間的開銷。我實參告訴一個地址,形參你就按照這個地址去取值或修改就可以了。

二項目管理方面:

1.的生命週期總結各個的區別:

(1)順序式:開發按軟件開發的完整步驟一步到底進行。即:需求收集-》分析-》設計-》編碼-》集成-》測試。直到完成,不會發生重複其中的任何環節。

(2)迭代式:在需求收集已經完善時使用。通過不斷重複原型階段:分析-》設計-》編碼來進行工作,在期間就是不做測試和集成。測試盒集成放項目後期去做。

(3)增量式:在需求收集只有部分時使用。這裏首先必須分析選擇整體架構。之後一直重複軟件開發的完整步驟去開發每一項功能,即每一個功能都要經歷:

分析-》設計-》編碼-》集成-》測試。即每重複一次增加一項可用的新功能。

(4)敏捷式:就是迭代式+增量式。這裏首先必須進行部分需求收集以及規劃遊戲。然後按需求重複時間盒,每個時間盒產生已通過測試並可運行的功能。

三架構方面:

1.對於一些框架的搭建:可以去學習和使用了JAVA的註釋技術和反射技術來框架的初步搭建。

2.在軟件開發過程中一定要時刻記住一個萬能模型:MVC模型。寫代碼時刻記住將數據處理的代碼和UI顯示部分的代碼分開,以便數據的處理模塊和UI的顯示模塊間能夠各自獨立的變化,只要他們之間的通信接口不變就行。實現了模塊間的低耦合。從而使數據的處理和UI的顯示能夠各自獨立的進行,實現了模塊間的低耦合。

3.分層模型:每一層做每一層自己該做的事情,需要其他層的幫助則調用各層協議給出的通信用的API接口,從而獲得需要的數據和服務。比如Android系統就是一個很好的分層模型:APP層->Framework框架層->運行時庫層->Linux內核層。

4.雙進程策略:在一個應用中去生成兩個進程,前臺UI進程和後臺網絡進程,他們之間進行進程間通信。這樣做的一個好處就是後臺網絡進程發生了異常被關閉之後,UI進程可以重啓該進程,並在發生異常前通過使用永久存儲來保存必要的現場數據,並在異常發生後重啓後臺進程,並讀取之前保存的現場數據來恢復現場。對於UI進程就好像沒有發生任何事一樣。當然最終要去查找後臺網絡進程發生了什麼異常。

在Android中進程間通信首先想到的是Binder,由於後臺進程容易被Android系統的ActivityManagerService關閉掉,導致Binder通信會出現中斷的問題。而Android的BroadcastReceiver同樣具有進程間通信的功能,所以有時使用Broadcast比Binder好些。

5.多線程模型:

由於SDK層是與網絡進行通信,並且要維護本地數據庫中的數據。這其中包含的網路操作以及數據庫操作,對於UI界面層來說,都是相對耗時的操作。通過SDK來獲取相應的數據必須通過線程以及異步回調的方式來進行,否則會給用戶非常卡的體驗。線程池中做後臺工作線程池工作完成後,在UI主線程調用異步回調Listener。在UI主線程中回調異步Listener的原因是,Android規定所有對UI進行更新的操作必須在UI線程中進行。否則Android要報一個運行時異常。


6.數據傳遞方式-JSON

而JSON能夠在對象和字符串之間進行轉換。Google已經對JSON進行了封裝,該封裝類叫做GSON。通過GSON中提供的方法能夠很方便的把要傳遞的JAVA對象轉換成String對象,同樣SDK傳回的String對象通過GSON提供的方法很容易獲得一個JAVA對象。由於Binder只能傳輸Java基本數據類型的數據以及String類型的數據。所以Android的進程間通信Binder也可以傳遞String對象,通過JSON,能夠在JNI層,Binder進程間進行數據的傳遞。



發佈了18 篇原創文章 · 獲贊 5 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章