當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]全部 Activity 可繼承自 BaseActivity,便于統(tǒng)一風格與處理公共事件,構(gòu)建對話框統(tǒng)一構(gòu)建器的建立,萬一需要整體變動,一處修改到處有效。

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

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

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

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

5. 如果數(shù)據(jù)沒有必要加載,數(shù)據(jù)請務(wù)必延遲初始化,謹記為用戶節(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),否則相當于沒有同步。

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)永遠刪不掉的臟數(shù)據(jù)喔。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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,嚴格交替進行寫入: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. 編碼遇到讀寫、出入等邏輯要雙向考慮,文件導入導出,字符字節(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ù)包括類(指向類的指針,描述了類的類型),標記(描述了對象狀態(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 小得多,但它不是準確設(shè)置大小的。List 要使用的正確實現(xiàn)是 ArrayList 還是 LinkedList 取決于 List 長度的可預(yù)測性。如果長度未知,那么正確的選擇可能是 LinkedList,因為集合包含的空白空間更少。如果大小已知或可預(yù)知或比較小,那么 ArrayList 的內(nèi)存開銷會更低一些。

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

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

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

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

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

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

49. 當出現(xiàn)編譯或者運行時錯誤,別人那沒問題時,考慮你的編譯環(huán)境和環(huán)境版本是否有問題。

50. 由于 String 類的 immutable 性質(zhì),當 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ù)雜,含有空標簽、重復(fù)名字標簽時容易出現(xiàn)異常問題;TEXT 中使用 getText ()方法代替 START_TAG 中使用 nextText ()方法;START_TAG,TEXT,END_TAG 三個事件配合使用。注意每個 xml 節(jié)點之間(不管是開始節(jié)點還是結(jié)束節(jié)點)都會出現(xiàn) TEXT 事件。

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

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

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

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

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

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉