1. 心得體會 1.1 線程 寫代碼時,需要至少考慮兩個問題:UI線程與子線程。 UI線程:主要處理UI線程的事情(這不是廢話嗎?) 子線程:主要做網路連接、回調、文件IO等操作。 備註:UI線程不能夠被阻塞,不然會有ANR問題。 1.2 界面 寫代碼時,不要貪圖方便在xml中用一個ViewPage ...
1. 心得體會
1.1 線程
寫代碼時,需要至少考慮兩個問題:UI線程與子線程。
UI線程:主要處理UI線程的事情(這不是廢話嗎?)
子線程:主要做網路連接、回調、文件IO等操作。
備註:UI線程不能夠被阻塞,不然會有ANR問題,每一個子線程都是有主線程創建出來的,但不依附主線程,而主線程的對象狀態變化與主線程息息相關。
1.2 界面
寫代碼時,不要貪圖方便在xml中用一個ViewPager或者RecyclerView將功能全部整在一起。
應該分清幾個界面,以空間還效率,因為你永遠不知道你的程式是否滿足需求(提前溝通?扯淡去吧)或者說自己是否把異常情況都考慮進去。
1.3 異常情況處理
1、基本功能測試;
2、特殊測試【空指針異常(字元串空)、錯誤輸入:例如、除數0、鏈表首尾】
3、性能測試【最大最小值測試】
備註:不要貪圖方便,不做空指針異常判斷與字元串長度為0的判斷。(忘了做演算法題的嚴謹了嗎?)
1.4 資源回收
嘗試使用關鍵字try、finnally回收socket、文件資源。
1.5 考慮線程安全、同步、鎖的問題
同步-安全(同一時間只有一個線程能對數據進行操作),多線程對某個數據進行讀寫操作時,可進行保護使用鎖或者關鍵字volatile。
關於線程通信:wait、notify與notifyall。
1.6 若遇重覆代碼,立即想想應該如何避免重覆。(showToast)
1.7 若遇需要多次改變的代碼,想想能否抽象一個公用的介面,讓實現類去具體實現。
比如說圖片庫picasso、fresco,比如說要將picasso替換成fresco,每個使用到picasso的地方都要改動,一不小心就會改錯。
具體解決辦法:定義介面,實現類實現介面,工廠類依賴介面實例化實現類。【預留變更,不強耦合於第三方框架】
1.8 顯示與邏輯分開
1.9 牢記:單一職責、開放封閉原則、依賴倒轉原則、里氏替換原則
1.10 遇到魔鬼數字或者魔鬼字元串,都應該定義為成員變數
好處:避免一處修改,處處修改的問題。萬一寫少一個零怎麼辦呢?
1.11 儘量用MVP模式寫代碼
View:Activity、Fragment、Dialog、Adapter等,該層不包含任何業務邏輯;
Presenter:中介,View 與 Model 不發生聯繫,都通過 Presenter 傳遞;
Model:相關的業務操作處理數據(如對資料庫的操作、對網路等的操作都應該在Model層里)。
最重要一點:
在需求不清晰的情況下,要去詢問。【對於不清楚的知識點,要弄懂到會用,不斷完善自己的知識結構、善於提問與主動積極。】