Android日常開發(fā)60條經(jīng)驗


???? 原文轉(zhuǎn)自極分享???? 更多詳情及更新查看原文????



閱讀原文 ? 更多精彩內(nèi)容

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)于形參實參:調(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ù)雜一點也會值得习劫,修改起來很輕松嚼隘,修改一種诽里,到處有效飞蛹。

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

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

21.監(jiān)聽者模式不方便使用時,推薦EventBus框架庫暖呕,使用時間總線苞氮,沒接觸過的同學(xué)可以自行腦補一下哦。

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

23. timepicker 點擊確定后需要clearFocus才能獲取手動輸入的時間戚揭。

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

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

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

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

28. 注意按鈕的感應(yīng)范圍不小于9mm否則不易點擊唁影;輸入框注意光標(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ù)庫浪費空間。

33. 存在多個不同的dbhelper實例情況下慢哈,sqlitedatabase對象必然存在不同的實例永票,多線程同時寫入數(shù)據(jù),輪流寫入數(shù)據(jù)時會不定時的報db is locked侣集,引起崩潰世分,不管是操作同張表還是異表。讀和寫可以同時并發(fā)臭埋,輪流無規(guī)律的交替執(zhí)行。同時寫入數(shù)據(jù)時解決方案是用并發(fā)的每個線程都用事務(wù)畅蹂,db則不會lock荣恐,按次整體寫入。

34. 建議整個應(yīng)用維護一個dbhelper實例少漆,只要db沒有關(guān)閉痹束,全局就只有一個db實例讶请,多線程并發(fā)寫入db不會lock屎媳,嚴(yán)格交替進行寫入:123123123论巍。嘉汰。。(123代表不同線程鞋怀,輪流插入一個記錄),讀和寫均不會鎖住db焙矛,讀寫交替并沒有規(guī)律残腌,執(zhí)行次數(shù)和程度看cpu分配給哪個線程的時間片長。

35. 一個任務(wù)使用事務(wù)嵌套N個事務(wù)蟆盹,N個事務(wù)中有一個失敗闺金,這個任務(wù)整體失敗,全部成功后匣距,數(shù)據(jù)才寫入哎壳,具有安全性,整體性尸红。并且事務(wù)寫入大批量數(shù)據(jù)的效率經(jīng)實際測試成百上千倍的高于一般的單個寫入刹泄。數(shù)據(jù)庫大量數(shù)據(jù)、多線程操作建議使用LiteOrm數(shù)據(jù)庫框架盅蝗,更穩(wěn)定簡單姆蘸。

36. 經(jīng)常需要用ListView或者其它顯示大量Items的控件實時跟蹤或者查看信息芙委,并且希望最新的條目可以自動滾動到可視范圍內(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位機器有不同)。額外的開銷源于 JVM 用于描述 Java 對象的元數(shù)據(jù)也就是 Integer筷屡,(Long簸喂、Double等也是)。

40. 對象由元數(shù)據(jù)和數(shù)據(jù)組成扼倘。元數(shù)據(jù)包括類(指向類的指針除呵,描述了類的類型)隅肥,標(biāo)記(描述了對象狀態(tài)袄简,如散列碼泛啸、形狀等),鎖(對象同步信息)吕粹。數(shù)組對象還包括大小的元數(shù)據(jù)岗仑。

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

42. Hash 集合的訪問性能比任何 List 的性能都要高炸卑,但每條目的成本也要更高盖文。由于訪問性能方面的原因,如果您正在創(chuàng)建大集合(例如五续,用于實現(xiàn)緩存),那么最好使用基于 Hash 的集合疙驾,而不必考慮額外的開銷。

43. 對于并不那么注重訪問性能的較小集合而言镊靴,List 則是合理的選擇链韭。ArrayList 和 LinkedList 集合的性能大體相同,但其內(nèi)存占用完全不同:ArrayList 的每條目大小要比 LinkedList 小得多踊谋,但它不是準(zhǔn)確設(shè)置大小的旋讹。List 要使用的正確實現(xiàn)是 ArrayList 還是 LinkedList 取決于 List 長度的可預(yù)測性轿衔。如果長度未知害驹,那么正確的選擇可能是 LinkedList蛤育,因為集合包含的空白空間更少。如果大小已知或可預(yù)知或比較小底洗,那么 ArrayList 的內(nèi)存開銷會更低一些咕娄。

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

44. 充分利用封裝(提供接口類來控制訪問數(shù)據(jù))和委托(helper對象來實施任務(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)編譯或者運行時錯誤摸航,別人那沒問題時舅桩,考慮你的編譯環(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ù)是單獨存值的,即使與棧中的數(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é)點之間(不管是開始節(jié)點還是結(jié)束節(jié)點)都會出現(xiàn)TEXT事件。

56. 改變邏輯的時候考慮全部用到這項功能的地方旭愧,分散的地方多了虐秋,容易大意垃沦。

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

58. 輸入控件注意對空格咽瓷、換行等符號的控制茅姜;輸入框里內(nèi)容注意和左右控件的空間,防止誤點擊奋姿。

59. 注意函數(shù)參數(shù)里的++或者–操作。是++c 還是 c++胀蛮,區(qū)別很大粪狼。

60. 各種地方、永遠(yuǎn)的不要小看null指針問題狡刘,甚至有些場合寧可錯殺(try catch)困鸥,不可放過疾就。


???? 原文轉(zhuǎn)自極分享???????????? 更多詳情及更新查看原文????


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鸟废,隨后出現(xiàn)的幾起案子姑荷,更是在濱河造成了極大的恐慌鼠冕,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件计露,死亡現(xiàn)場離奇詭異票罐,居然都是意外死亡寨闹,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進店門乡数,熙熙樓的掌柜王于貴愁眉苦臉地迎上來闻牡,“玉大人,你說我怎么就攤上這事玖翅「钜裕” “怎么了严沥?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵消玄,是天一觀的道長。 經(jīng)常有香客問我受扳,道長兔跌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任相满,我火速辦了婚禮,結(jié)果婚禮上方灾,老公的妹妹穿的比我還像新娘碌更。我一直安慰自己,他們只是感情好嘿棘,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布旭绒。 她就那樣靜靜地躺著,像睡著了一般花椭。 火紅的嫁衣襯著肌膚如雪房午。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天袋倔,我揣著相機與錄音奕污,去河邊找鬼液走。 笑死,一個胖子當(dāng)著我的面吹牛嘱根,可吹牛的內(nèi)容都是我干的巷懈。 我是一名探鬼主播该抒,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼顶燕!你這毒婦竟也來了凑保?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涌攻,失蹤者是張志新(化名)和其女友劉穎欧引,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恳谎,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡芝此,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了婚苹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡鸵膏,死狀恐怖膊升,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情谭企,我是刑警寧澤廓译,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布结胀,位于F島的核電站,受9級特大地震影響责循,放射性物質(zhì)發(fā)生泄漏糟港。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一院仿、第九天 我趴在偏房一處隱蔽的房頂上張望秸抚。 院中可真熱鬧,春花似錦歹垫、人聲如沸剥汤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吭敢。三九已至,卻和暖如春暮芭,著一層夾襖步出監(jiān)牢的瞬間鹿驼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工辕宏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留畜晰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓瑞筐,卻偏偏與公主長得像凄鼻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子聚假,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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