1. Activity可繼承自BaseActivity,便於統一風格與處理公共事件,構建對話框統一構建器的創建,萬一須要總體變更,一處修改處處有效。
2. 數據庫表段字段常量和SQL邏輯分離,更清晰。
3. 全局變量放全局類中,模塊私有放本身的管理類中,不要相信龐大的管理的東西會帶來什麼好處,多是一場災難。
4. 若是數據沒有必要加載,私有模塊數據務必延遲初始化,謹記爲用戶節省內存,總不會有壞處。
5. 異常拋出,集中到合適的位置處理,不要拋出來異常當即捕獲,搞的處處是catch。
6. 地址引用鏈長時(3個以上指向)當心內存泄漏,和警戒堆棧地址指向。
7.信息同步:新插入的數據注意返回ID。
8.多線程時db關閉了會報錯。
9.作以前先考慮那些能夠公用,資源,layout,類,作一個架構分析。
10 有序隊列操做AD操做時注意排序。
11. 刪除要注意級聯操做。
12 對返回的null對象作好充分的容錯。
13. 形參實參:基本類型傳值,對象傳引用。傳址方式,形參能夠改變對象狀態和內容,可是不可改變實參的內容。
14. listview在數據未滿一屏時,setSelection函數不起做用。
15 批量操做嚴格和視圖對應,不容隱患。
16 控制Activity的代碼量,保持主要邏輯清晰。其餘類遵照SRP,ISP原則。
17. arraylist執行remove時注意移除int和Integer的區別。
18. 調試打印必定要作標記,能定位打印位置,不然後期類多了都不知道是哪裏在打印。
19. 碼塊/常量/資源能夠集中公用的必定共用,即便共用邏輯複雜一點也值得,修改起來很輕鬆,修改一種,處處有效。
20. setSelection不起做用,嘗試smoothScrollToPosition。ListView的LastVisiblePosition(最後一個可見子項)會隨着getView方法執行位置不一樣變更而變。
21與Activity通信使用Handler更方便; 若是你的框架回調鏈變長,考慮監聽者模式簡化回調。
22. Handler在其餘線程使用Looper.prepare,主線程則不用。
23. timepicker 點擊肯定後須要clearFocus才能獲取手動輸入的時間。
24. 構造函數裏面不要輕易啓動異步線程。假設異步線程調用了本例的示例,就會悲劇。
25. 千萬不要理所固然的覺得一個對象不會爲空,充分的作好容錯處理。
26. ExpandableListView的子列表不能點擊要把Adapter的isChildSelectable方法返回true。
27. UI顯示注意內容過長的情形,注意按鈕的感應範圍不小於9mm,注意光標的位置。
28. 服務器和客戶端儘可能統一惟一標識,不然多少會有歧義和問題。
29. 註釋,要寫足夠的註釋,達到看了能夠明白某一塊代碼的效果。
30. 使用Log打日誌,打上Tag。
31. 完整型數據必定要用Sqlite的Transaction,大數據必定要用。插入100個數據有20倍的提速,插入1000個數據就有100多倍的提速。
32. 避免String=」null」的狀況出現String = null,=」"均可以。避免出現title=」無主題」這樣的數據提交到數據庫浪費空間。
33. 存在多個不一樣的dbhelper實例狀況下,sqlitedatabase對象必然存在不一樣的實例,多線程同時寫入數據,輪流寫入數據時會不定時的報db is locked,引發崩潰,不論是操做同張表仍是異表。讀和寫能夠同事併發,輪流無規律的交替執行。同時寫入數據時解決方案是用併發的每一個線程都用事務,db則不會lock,按次總體寫入。
34. 建議整個應用維護一個dbhelper實例,只要db沒有關閉,全局就只有一個db實例,多線程併發寫入db不會lock,嚴格交替進行寫入:123123123。。。(123表明不一樣線程,輪流插入一個記錄),讀和寫均不會鎖住db,讀寫交替並無規律,執行次數和程度看cpu分配給哪一個線程的時間片長。
35. 一個任務使用事務嵌套N個事務,N個事務中有一個失敗,這個任務總體失敗,所有成功後,數據才寫入,具備安全性,總體性。而且事務寫入大批量數據的效率經實際測試成百上千倍的高於通常的單個寫入。
36. 常常須要用ListView或者其它顯示大量Items的控件實時跟蹤或者查看信息,而且但願最新的條目能夠自動滾動到可視範圍內。經過設置的控件transcriptMode屬性能夠將
Android平臺的控件(支持ScrollBar)自動滑動到最底部。
37. Long a; 判斷a有沒有賦值,if(a == 0)在a沒有賦值狀況下會報錯。應該if(a == null),Integer也同樣。
38. 編碼遇到讀寫、出入等邏輯要雙向考慮,文件導入導出,字符字節相互轉換都要兩邊轉碼。
39. 一個 int 值與一個 Integer 對象(能包含 int 值的最小對象)的大小比率是 1:4,這個比率可能會讓您感到吃驚。額外的開銷源於 JVM 用於描述
Java 對象的元數據也就是 Integer。
40. 對象由元數據和數據組成。元數據包括類(指向類的指針,描述了類的類型),標記(描述了對象狀態,如散列碼、形狀等),鎖(對象同步信息)。數組對象還包括大小的元數據。
41. 一個在 32 位
Java 運行時中使用 1GB
Java 堆的 Java 應用程序在遷移到 64 位 Java 運行時以後,一般須要使用 1.7GB 的 Java 堆。
42. Hash 集合的性能比任何 List 的性能都要高,但每條目的成本也要更高。因爲訪問性能方面的緣由,若是您正在建立大集合(例如,用於實現緩存),那麼最好使用基於 Hash 的集合,而沒必要考慮額外的開銷。
43. 對於並不那麼注重訪問性能的較小集合而言,List 則是合理的選擇。ArrayList 和 LinkedList 集合的性能大致相同,但其內存佔用徹底不一樣:ArrayList 的每條目大小要比 LinkedList 小得多,但它不是準確設置大小的。List 要使用的正確實現是 ArrayList 仍是 LinkedList 取決於 List 長度的可預測性。若是長度未知,那麼正確的選擇多是 LinkedList,由於集合包含的空白空間更少。若是大小已知,那麼 ArrayList 的內存開銷會更低一些。
43. 選擇正確的集合類型使您可以在集合性能與內存佔用之間達到合理的平衡。除此以外,您能夠經過正確調整集合大小來最大化填充率、最小化未獲得利用的空間,從而最大限度地減小內存佔用。
44. 充分利用封裝(提供接口類來控制訪問數據)和委託(helper對象來實施任務)。
45. 延遲分配 Hashtable:若是 Hashtable 爲空是常常發生的廣泛現象,那麼僅在存在須要存儲的數據時分配 Hashtable 應該是一種合理的作法。
將 Hashtable 分配爲準確的大小:因爲使用默認大小,所以徹底可使用更爲準確的初始大小。
46. EditText在setText時不要忘記是否須要setSelection。在大多數狀況下是須要設置的。
47. XML兩種狀況要注意:1 屬性名字時候有重複;2 注意文本是否包含非法字符,注意使用CDATA包裹。
48. 當邏輯沒有明顯問題時考慮對象屬性、函數參數、網絡傳輸參數是否所有了解,是否設置正確。
49. 當出現編譯或者運行時錯誤,別人那沒問題時,考慮你的編譯環境和環境版本是否有問題。
50. 因爲String類的immutable性質,當String變量須要常常變換其值時,應該考慮使用StringBuffer類,以提升程序效率。
51. java 棧的優點是比堆速度快,可共享,主要存放臨時變量、參數等,堆的優點是可動態分配內存大小。
52. 只要是用new()來新建對象的,都會在堆中建立,並且其字符串是單獨存值的,即便與棧中的數據相同,也不會與棧中的數據共享。
53. 基本數據類型定義的變量稱自動變量,存的是‘字面值’,存在於棧中,可共享(存在即不新建)。
54. 多個RandomAccessFile對象指向同一個文件,可以使用多個線程一塊兒寫入無需鎖住對象,經試驗結論:三個線程分別寫入100萬次數據,使用鎖約12秒,不使用約8.5秒。
100個線程分別寫入1萬次數據使用鎖耗時約4.2秒,不使用鎖耗時約3秒。
55. XmlPullParser解析慎用nextText()方法,xml比較複雜,含有空標籤、重複名字標籤時容易出現異常問題;TEXT中使用getText()方法代替START_TAG中使用nextText()方法;START_TAG,TEXT,END_TAG三個事件配合使用。注意每一個xml節點之間(不論是開始節點仍是結束節點)都會出現TEXT事件。
56. 改變邏輯的時候考慮所有用到這項功能的地方,分散的地方多了,容易大意。
57. 當系統組件出現問題時,查看錯誤棧信息,在合適的地方將出錯方法複寫一下,加上try catch保證不崩潰掉。切記不要擾亂了該系統控件的正常邏輯。
58. 輸入控件注意對空格、換行等符號的控制。輸入框裏內容注意和左右控件的控件,防止誤點擊。
59. 注意函數參數裏的++或者–操做。是++c 仍是 c++,區別很大。注意null也能夠插入ArrayList中。
60. 永遠不要小看null指針問題,寧肯錯殺,不可放過。