集合:安卓開發中怎麼注意細節?一文告訴你四十個

yilian發表於2020-02-10
image
image

1.全部Activity可繼承自BaseActivity,便於統一風格與處理公共事件,構建對話方塊統一構建器的建立,萬一需要整體變動,一處修改到處有效。

2.資料庫表段欄位常量和SQL邏輯分離,更清晰,建議使用Lite系列框架LiteOrm庫,超級清晰且重心可以放在業務上不用關心資料庫細節。

3.全域性變數放全域性類中,模組私有放自己的管理類中,讓常量清晰且集中.

4.不要相信龐大的管理類的東西會帶來什麼好處,可能是一場災難,而要時刻注意單一職責原則,一個類專心做好一件事情更為清晰。

5.如果資料沒有必要載入,資料請務必延遲初始化,謹記為使用者節省記憶體,總不會有壞處。

6.異常丟擲,在合適的位置處理或者集中處理,不要搞的到處是catch,混亂且效能低,儘量不要在迴圈體中捕獲異常,以提升效能。

7.地址引用鏈長時(3個以上指向)小心記憶體洩漏,和警惕堆疊地址指向,典型的易發事件是:資料更新了,ListView檢視卻沒有重新整理,這時Adapter很可能指向並的並不是你更新的資料容器地址(一般為List)。

8.資訊同步:不管是資料庫還是網網路操作,新插入的資料注意返回ID(如果沒有賦予唯一ID),否則相當於沒有同步。

9.多執行緒運算元據庫時,db關閉了會報錯,也很可能出現互鎖的問題,推薦使用事務,推薦使用自動化的LiteOrm庫操作。

10.做之前先考慮那些可以公用,資源,layout,類,做一個結構、架構分析以加快開發,提升程式碼可複用度。

image
image
  • 有序佇列操作add、delete操作時注意保持排序,否則你會比較難堪喔。

  • 資料庫刪除資料時,要注意級聯操作避免出現永遠刪不掉的髒資料喔。

  • 關於形參實參:呼叫函式時引數為基本型別傳的是值,即傳值;引數為物件傳遞的是引用,即傳址。

  • listview在資料未滿一屏時,setSelection函式不起作用;ListView批次操作時各子項和檢視正確對應,可見即所選。

  • 控制Activity的程式碼量,保持主要邏輯清晰。其他類遵守SRP(單一職能),ISP(介面隔離)原則。

  • arraylist執行remove時注意移除int和Integer的區別。你懂得。

  • Log請打上Tag,除錯列印一定要做標記,能定位列印位置,否則尷尬是:不知道是哪裡在列印。

  • 碼塊/常量/資源可以集中公用的一定共用,即使共用邏輯稍複雜一點也會值得,修改起來很輕鬆,修改一種,到處有效。

  • setSelection不起作用,嘗試smoothScrollToPosition。ListView的LastVisiblePosition(最後一個可見子項)會隨著getView方法執行位置不同變動而變。

image
image

20.與Activity通訊使用Handler更方便; 如果你的框架回撥鏈變長,考慮監聽者模式簡化回撥。

21.監聽者模式不方便使用時,推薦EventBus框架庫,使用時間匯流排,沒接觸過的同學可以自行腦補一下哦。

22.Handler在子執行緒執行緒使用Looper.prepare,或者new的時候給建構函式傳入MainLooper來確保在主執行緒run。

23.timepicker 點選確定後需要clearFocus才能獲取手動輸入的時間。

24.建構函式里面極度不推薦啟動非同步執行緒,會埋下隱患。比如:非同步執行緒呼叫了本例的示例,就會悲劇等著崩潰吧。

25.千萬不要理所當然的以為一個物件不會為空,充分的做好容錯處理;另外注意null也可以插入ArrayList等容器中。

26.ExpandableListView的子列表不能點選(禁用)要把Adapter的isChildSelectable方法返回true。

27.UI顯示注意內容過長的情形要提前使用ScrollView否則在小手機上尷尬你懂得。

28.注意按鈕的感應範圍不小於9mm否則不易點選;輸入框注意游標的位置更易使用者輸入。

29.伺服器和客戶端儘量統一唯一標識(有可能是ID),否則多少會有歧義和問題。

30.註釋,儘量去寫足夠的註釋,去描述一下思路,達到看了可以明白某一塊程式碼的效果。

image
image
  • 完整型資料一定要用Sqlite的Transaction,大資料一定要用。粗略測試插入100個資料有20倍的提速,插入1000個資料就有100多倍的提速。

  • 避免String=”null”的情況出現String = null,=””都可以。避免出現title=”無主題”這樣的資料提交到資料庫浪費空間。

  • 存在多個不同的dbhelper例項情況下,sqlitedatabase物件必然存在不同的例項,多執行緒同時寫入資料,輪流寫入資料時會不定時的報db is locked,引起崩潰,不管是操作同張表還是異表。讀和寫可以同時併發,輪流無規律的交替執行。同時寫入資料時解決方案是用併發的每個執行緒都用事務,db則不會lock,按次整體寫入。

  • 建議整個應用維護一個dbhelper例項,只要db沒有關閉,全域性就只有一個db例項,多執行緒併發寫入db不會lock,嚴格交替進行寫入:123123123。。。(123代表不同執行緒,輪流插入一個記錄),讀和寫均不會鎖住db,讀寫交替並沒有規律,執行次數和程度看cpu分配給哪個執行緒的時間片長。

  • 一個任務使用事務巢狀N個事務,N個事務中有一個失敗,這個任務整體失敗,全部成功後,資料才寫入,具有安全性,整體性。並且事務寫入大批次資料的效率經實際測試成百上千倍的高於一般的單個寫入。資料庫大量資料、多執行緒操作建議使用LiteOrm資料庫框架,更穩定簡單。

  • 經常需要用ListView或者其它顯示大量Items的控制元件實時跟蹤或者檢視資訊,並且希望最新的條目可以自動滾動到可視範圍內。透過設定的控制元件transcriptMode屬性可以將Android平臺的控制元件(支援ScrollBar)自動滑動到最底部。

  • Long a; 判斷a有沒有賦值,if(a == 0)在a沒有賦值情況下會報錯。應該if(a == null),Integer、Floag等也一樣,原因你懂,只是提醒你要小心喔。

  • 編碼遇到讀寫、出入等邏輯要雙向考慮,檔案匯入匯出,字元位元組相互轉換都要兩邊轉碼。

  • 一個 int 值與一個 Integer 物件(能包含 int 值的最小物件)的大小比率約為 1:4(32位和64位機器有不同)。額外的開銷源於 JVM 用於描述 Java 物件的後設資料也就是 Integer,(Long、Double等也是)。

image
image

Android 發展至今,競爭日趨激烈,衝擊更高的職位,才有更高的收入!而我們Android程式設計師,要學的東西有很多,要想不被環境淘汰就只有不斷提升自己,從來都是我們去適應環境,而不是環境來適應我們!

附上我的Android核心技術學習大綱,獲取相關內容來我的GitHub一起玩耍:
vx:xx13414521

image
image

還有Android的精選學習進階影片,三星架構師、阿里p7、聯通架構師等大牛講解進階內容,簡信我【學習影片 】領取

image
image
image
image


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952849/viewspace-2675046/,如需轉載,請註明出處,否則將追究法律責任。

相關文章