Android工作經(jīng)驗之開發(fā)技術(shù)分享

原創(chuàng)作者:微信公眾號:java和android架構(gòu)

1. 全部Activity可繼承自BaseActivity宪塔,便于統(tǒng)一風(fēng)格與處理公共事件黎比,構(gòu)建對話框統(tǒng)一構(gòu)建器的建立墨闲,萬一需要整體變動氏涩,一處修改到處有效酬诀。

2.數(shù)據(jù)庫表段字段常量和SQL邏輯分離曹质,更清晰婴噩,建議使用Lite系列框架LiteOrm庫,超級清晰且重心可以放在業(yè)務(wù)上不用關(guān)心數(shù)據(jù)庫細(xì)節(jié)羽德。

3. 全局變量放全局類中几莽,模塊私有放自己的管理類中,讓常量清晰且集中.

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

5. 如果數(shù)據(jù)沒有必要加載纤垂,數(shù)據(jù)請務(wù)必延遲初始化矾策,謹(jǐn)記為用戶節(jié)省內(nèi)存,總不會有壞處峭沦。

6. 異常拋出贾虽,在合適的位置處理或者集中處理,不要搞的到處是catch吼鱼,混亂且性能低蓬豁,盡量不要在循環(huán)體中捕獲異常,以提升性能菇肃。

7. 地址引用鏈長時(3個以上指向)小心內(nèi)存泄漏地粪,和警惕堆棧地址指向,典型的易發(fā)事件是:數(shù)據(jù)更新了琐谤,ListView視圖卻沒有刷新蟆技,這時Adapter很可能指向并的并不是你更新的數(shù)據(jù)容器地址(一般為List)。

8.信息同步:不管是數(shù)據(jù)庫還是網(wǎng)網(wǎng)絡(luò)操作斗忌,新插入的數(shù)據(jù)注意返回ID(如果沒有賦予唯一ID)质礼,否則相當(dāng)于沒有同步。

9.多線程操作數(shù)據(jù)庫時飞蹂,db關(guān)閉了會報錯,也很可能出現(xiàn)互鎖的問題翻屈,推薦使用事務(wù)陈哑,推薦使用自動化的LiteOrm庫操作。

10.做之前先考慮那些可以公用伸眶,資源惊窖,layout,類厘贼,做一個結(jié)構(gòu)界酒、架構(gòu)分析以加快開發(fā),提升代碼可復(fù)用度嘴秸。

11. 有序隊列操作add毁欣、delete操作時注意保持排序,否則你會比較難堪喔岳掐。

12. 數(shù)據(jù)庫刪除數(shù)據(jù)時凭疮,要注意級聯(lián)操作避免出現(xiàn)永遠(yuǎn)刪不掉的臟數(shù)據(jù)喔。

13. 關(guān)于形參實(shí)參:調(diào)用函數(shù)時參數(shù)為基本類型傳的是值串述,即傳值;參數(shù)為對象傳遞的是引用执解,即傳址。

14. listview在數(shù)據(jù)未滿一屏?xí)r纲酗,setSelection函數(shù)不起作用;ListView批量操作時各子項和視圖正確對應(yīng)衰腌,可見即所選新蟆。

15 控制Activity的代碼量,保持主要邏輯清晰右蕊。其他類遵守SRP(單一職能)琼稻,ISP(接口隔離)原則。

16. arraylist執(zhí)行remove時注意移除int和Integer的區(qū)別尤泽。你懂得欣簇。

17. Log請打上Tag,調(diào)試打印一定要做標(biāo)記坯约,能定位打印位置熊咽,否則尷尬是:不知道是哪里在打印。

18. 碼塊/常量/資源可以集中公用的一定共用闹丐,即使共用邏輯稍復(fù)雜一點(diǎn)也會值得横殴,修改起來很輕松,修改一種卿拴,到處有效衫仑。

19. setSelection不起作用,嘗試smoothScrollToPosition堕花。ListView的LastVisiblePosition(最后一個可見子項)會隨著getView方法執(zhí)行位置不同變動而變文狱。

20.與Activity通訊使用Handler更方便; 如果你的框架回調(diào)鏈變長,考慮監(jiān)聽者模式簡化回調(diào)缘挽。

21.監(jiān)聽者模式不方便使用時瞄崇,推薦EventBus框架庫,使用時間總線壕曼,沒接觸過的同學(xué)可以自行腦補(bǔ)一下哦苏研。

22. Handler在子線程線程使用Looper.prepare,或者new的時候給構(gòu)造函數(shù)傳入MainLooper來確保在主線程run腮郊。

23. timepicker 點(diǎn)擊確定后需要clearFocus才能獲取手動輸入的時間摹蘑。

24. 構(gòu)造函數(shù)里面極度不推薦啟動異步線程,會埋下隱患轧飞。比如:異步線程調(diào)用了本例的示例衅鹿,就會悲劇等著崩潰吧。

25. 千萬不要理所當(dāng)然的以為一個對象不會為空过咬,充分的做好容錯處理;另外注意null也可以插入ArrayList等容器中塘安。

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

27. UI顯示注意內(nèi)容過長的情形要提前使用ScrollView否則在小手機(jī)上尷尬你懂得援奢。

28. 注意按鈕的感應(yīng)范圍不小于9mm否則不易點(diǎn)擊;輸入框注意光標(biāo)的位置更易用戶輸入兼犯。

29. 服務(wù)器和客戶端盡量統(tǒng)一唯一標(biāo)識(有可能是ID),否則多少會有歧義和問題。

30. 注釋切黔,盡量去寫足夠的注釋砸脊,去描述一下思路,達(dá)到看了可以明白某一塊代碼的效果纬霞。

31. 完整型數(shù)據(jù)一定要用Sqlite的Transaction凌埂,大數(shù)據(jù)一定要用。粗略測試插入100個數(shù)據(jù)有20倍的提速诗芜,插入1000個數(shù)據(jù)就有100多倍的提速埠通。

32. 避免String=”null”的情況出現(xiàn)String = null,=””都可以末患。避免出現(xiàn)title=”無主題”這樣的數(shù)據(jù)提交到數(shù)據(jù)庫浪費(fèi)空間堂鲤。

33. 存在多個不同的dbhelper實(shí)例情況下玛瘸,sqlitedatabase對象必然存在不同的實(shí)例,多線程同時寫入數(shù)據(jù)翠桦,輪流寫入數(shù)據(jù)時會不定時的報db is locked横蜒,引起崩潰,不管是操作同張表還是異表销凑。讀和寫可以同時并發(fā)丛晌,輪流無規(guī)律的交替執(zhí)行。同時寫入數(shù)據(jù)時解決方案是用并發(fā)的每個線程都用事務(wù)斗幼,db則不會lock澎蛛,按次整體寫入。

34. 建議整個應(yīng)用維護(hù)一個dbhelper實(shí)例蜕窿,只要db沒有關(guān)閉谋逻,全局就只有一個db實(shí)例,多線程并發(fā)寫入db不會lock渠羞,嚴(yán)格交替進(jìn)行寫入:123123123斤贰。智哀。次询。(123代表不同線程,輪流插入一個記錄)瓷叫,讀和寫均不會鎖住db屯吊,讀寫交替并沒有規(guī)律,執(zhí)行次數(shù)和程度看cpu分配給哪個線程的時間片長摹菠。

35. 一個任務(wù)使用事務(wù)嵌套N個事務(wù)盒卸,N個事務(wù)中有一個失敗,這個任務(wù)整體失敗次氨,全部成功后蔽介,數(shù)據(jù)才寫入,具有安全性,整體性虹蓄。并且事務(wù)寫入大批量數(shù)據(jù)的效率經(jīng)實(shí)際測試成百上千倍的高于一般的單個寫入犀呼。數(shù)據(jù)庫大量數(shù)據(jù)、多線程操作建議使用LiteOrm數(shù)據(jù)庫框架薇组,更穩(wěn)定簡單外臂。

36. 經(jīng)常需要用ListView或者其它顯示大量Items的控件實(shí)時跟蹤或者查看信息,并且希望最新的條目可以自動滾動到可視范圍內(nèi)律胀。通過設(shè)置的控件transcriptMode屬性可以將Android平臺的控件(支持ScrollBar)自動滑動到最底部宋光。

37. Long a; 判斷a有沒有賦值,if(a == 0)在a沒有賦值情況下會報錯炭菌。應(yīng)該if(a == null)罪佳,Integer、Floag等也一樣娃兽,原因你懂菇民,只是提醒你要小心喔。

38. 編碼遇到讀寫投储、出入等邏輯要雙向考慮第练,文件導(dǎo)入導(dǎo)出,字符字節(jié)相互轉(zhuǎn)換都要兩邊轉(zhuǎn)碼玛荞。

39. 一個 int 值與一個 Integer 對象(能包含 int 值的最小對象)的大小比率約為 1:4(32位和64位機(jī)器有不同)娇掏。額外的開銷源于 JVM 用于描述Java對象的元數(shù)據(jù)也就是 Integer,(Long勋眯、Double等也是)婴梧。

40. 對象由元數(shù)據(jù)和數(shù)據(jù)組成。元數(shù)據(jù)包括類(指向類的指針客蹋,描述了類的類型)塞蹭,標(biāo)記(描述了對象狀態(tài),如散列碼讶坯、形狀等)番电,鎖(對象同步信息)。數(shù)組對象還包括大小的元數(shù)據(jù)辆琅。

41. 一個在 32 位 Java 運(yùn)行時中使用 1GB Java 堆的 Java 應(yīng)用程序在遷移到 64 位 Java 運(yùn)行時之后漱办,通常需要使用 1.7GB 的 Java 堆。

42. Hash 集合的訪問性能比任何 List 的性能都要高婉烟,但每條目的成本也要更高娩井。由于訪問性能方面的原因,如果您正在創(chuàng)建大集合(例如似袁,用于實(shí)現(xiàn)緩存)洞辣,那么最好使用基于 Hash 的集合咐刨,而不必考慮額外的開銷。

43. 對于并不那么注重訪問性能的較小集合而言扬霜,List 則是合理的選擇所宰。ArrayList 和 LinkedList 集合的性能大體相同,但其內(nèi)存占用完全不同:ArrayList 的每條目大小要比 LinkedList 小得多畜挥,但它不是準(zhǔn)確設(shè)置大小的仔粥。List 要使用的正確實(shí)現(xiàn)是 ArrayList 還是 LinkedList 取決于 List 長度的可預(yù)測性。如果長度未知蟹但,那么正確的選擇可能是 LinkedList躯泰,因為集合包含的空白空間更少。如果大小已知或可預(yù)知或比較小华糖,那么 ArrayList 的內(nèi)存開銷會更低一些麦向。

43. 選擇正確的集合類型使你能夠在集合性能與內(nèi)存占用之間達(dá)到合理的平衡。除此之外客叉,你可以通過正確調(diào)整集合大小來最大化填充率诵竭、最小化未得到利用的空間,從而最大限度地減少內(nèi)存占用兼搏。

44. 充分利用封裝(提供接口類來控制訪問數(shù)據(jù))和委托(helper對象來實(shí)施任務(wù))兩種理念卵慰。

45. 延遲分配 Hashtable:如果 Hashtable 為空是經(jīng)常發(fā)生的普遍現(xiàn)象,那么僅在存在需要存儲的數(shù)據(jù)時分配 Hashtable 應(yīng)該是一種合理的做法佛呻。將 Hashtable 分配為準(zhǔn)確的大猩雅蟆:雖然會有默認(rèn)大小,但建議使用更為準(zhǔn)確的初始大小吓著。

46. EditText在setText時不要忘記是否需要setSelection鲤嫡。在大多數(shù)情況下是需要設(shè)置的。

47. XML兩種情況要注意:1 屬性名字時候有重復(fù);2 注意文本是否包含非法字符绑莺,注意使用CDATA包裹暖眼。

48. 當(dāng)邏輯沒有明顯問題時考慮對象屬性、函數(shù)參數(shù)纺裁、網(wǎng)絡(luò)傳輸參數(shù)是否全部了解诫肠,是否設(shè)置正確。

49. 當(dāng)出現(xiàn)編譯或者運(yùn)行時錯誤对扶,別人那沒問題時区赵,考慮你的編譯環(huán)境和環(huán)境版本是否有問題惭缰。

50. 由于String類的immutable性質(zhì)浪南,當(dāng)String變量需要經(jīng)常變換其值時,應(yīng)該考慮使用StringBuilder提升性能漱受,多線程使用StringBuffer操作string提高程序效率络凿。

51. java 棧的優(yōu)勢是比堆速度快骡送,可共享,主要存放臨時變量絮记、參數(shù)等摔踱,堆的優(yōu)勢是可動態(tài)分配內(nèi)存大小。

52. 只要是用new()來新建對象的怨愤,都會在堆中創(chuàng)建派敷,而且其數(shù)據(jù)是單獨(dú)存值的,即使與棧中的數(shù)據(jù)(值)相同撰洗,也不會與棧中的數(shù)據(jù)共享篮愉。

53. 基本數(shù)據(jù)類型定義的變量稱自動變量,存的是‘字面值’差导,存在于棧中试躏,可共享(存在即不新建)。

54. 多個RandomAccessFile對象指向同一個文件设褐,可使用多個線程一起寫入無需再自己加鎖颠蕴,經(jīng)試驗結(jié)論:三個線程分別寫入100萬次數(shù)據(jù),使用鎖約12秒助析,不使用約8.5秒犀被。100個線程分別寫入1萬次數(shù)據(jù)使用鎖耗時約4.2秒,不使用鎖耗時約3秒外冀。

55. XmlPullParser解析慎用nextText()方法弱判,xml比較復(fù)雜,含有空標(biāo)簽锥惋、重復(fù)名字標(biāo)簽時容易出現(xiàn)異常問題;TEXT中使用getText()方法代替START_TAG中使用nextText()方法;START_TAG昌腰,TEXT,END_TAG三個事件配合使用膀跌。注意每個xml節(jié)點(diǎn)之間(不管是開始節(jié)點(diǎn)還是結(jié)束節(jié)點(diǎn))都會出現(xiàn)TEXT事件遭商。

56. 改變邏輯的時候考慮全部用到這項功能的地方,分散的地方多了捅伤,容易大意劫流。

57. 當(dāng)系統(tǒng)原生組件出現(xiàn)問題時,查看錯誤棧信息丛忆,自己寫一個該組件的子類祠汇,并在合適的地方將出錯方法復(fù)寫一下,加上try catch保證不崩潰掉熄诡。不要擾亂了該系統(tǒng)控件的正常邏輯可很。

58. 輸入控件注意對空格、換行等符號的控制;輸入框里內(nèi)容注意和左右控件的空間凰浮,防止誤點(diǎn)擊我抠。

59. 注意函數(shù)參數(shù)里的++或者–操作苇本。是++c 還是 c++,區(qū)別很大菜拓。

60. 各種地方瓣窄、永遠(yuǎn)的不要小看null指針問題,甚至有些場合寧可錯殺(try catch)纳鼎,不可放過俺夕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市贱鄙,隨后出現(xiàn)的幾起案子啥么,更是在濱河造成了極大的恐慌,老刑警劉巖贰逾,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件悬荣,死亡現(xiàn)場離奇詭異,居然都是意外死亡疙剑,警方通過查閱死者的電腦和手機(jī)氯迂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來言缤,“玉大人嚼蚀,你說我怎么就攤上這事」苄” “怎么了轿曙?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長僻孝。 經(jīng)常有香客問我导帝,道長,這世上最難降的妖魔是什么穿铆? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任您单,我火速辦了婚禮,結(jié)果婚禮上荞雏,老公的妹妹穿的比我還像新娘虐秦。我一直安慰自己,他們只是感情好凤优,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布悦陋。 她就那樣靜靜地躺著,像睡著了一般筑辨。 火紅的嫁衣襯著肌膚如雪俺驶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天挖垛,我揣著相機(jī)與錄音痒钝,去河邊找鬼。 笑死痢毒,一個胖子當(dāng)著我的面吹牛送矩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播哪替,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼栋荸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了凭舶?” 一聲冷哼從身側(cè)響起晌块,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帅霜,沒想到半個月后匆背,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡身冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年钝尸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搂根。...
    茶點(diǎn)故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡珍促,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出剩愧,到底是詐尸還是另有隱情猪叙,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布仁卷,位于F島的核電站穴翩,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锦积。R本人自食惡果不足惜藏否,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望充包。 院中可真熱鬧副签,春花似錦、人聲如沸基矮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽家浇。三九已至本砰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間钢悲,已是汗流浹背点额。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工舔株, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人还棱。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓载慈,卻偏偏與公主長得像,于是被迫代替她去往敵國和親珍手。 傳聞我的和親對象是個殘疾皇子办铡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,300評論 25 707
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法琳要,內(nèi)部類的語法寡具,繼承相關(guān)的語法,異常的語法稚补,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • 在我習(xí)慣養(yǎng)成中曾經(jīng)掉的幾個坑 1.習(xí)慣計劃中以事為中心童叠,忽略的人 提前做計劃,把事情排得滿滿當(dāng)當(dāng)课幕。眼里面只有一件件...
    螢火之燈閱讀 205評論 0 0
  • 被一對賤人利用了半天拯钻,最后被93磅的賬單治愈了… Brain一直說Sorry,這個世界很奇怪撰豺,作惡的人心安理得粪般,旁...
    Tiani閱讀 193評論 0 0
  • “設(shè)計房子下次就找你啊凡橱。俺們只管房子蓋好不倒就行小作。是挖路種樹的那個土木么?你們畢業(yè)是做包工頭的嗎稼钩?”
    工程寶閱讀 1,954評論 0 1