上海育創(chuàng)整理的《進(jìn)BAT公司必備的Android 開發(fā)寶典》

3年前 (2021-08-27)閱讀321回復(fù)0
孔培娜
孔培娜
  • 管理員
  • 發(fā)消息
  • 注冊排名3262
  • 經(jīng)驗(yàn)值40
  • 級別管理員
  • 主題8
  • 回復(fù)0
樓主
印刷廠直印加工●彩頁1000張只需要69元●名片5元每盒-更多產(chǎn)品印刷報(bào)價(jià)?聯(lián)系電話:138-1621-1622(微信同號)

  好的習(xí)慣和規(guī)范不僅可以有效地提高代碼的可讀性,也可以提高工作效率,甚至對于將來接手代碼的小伙伴也是一件幸事ID嵌套樣式問題。下面,題主通過查閱相關(guān)資料,整理出的 Andriod 開發(fā)的一些好習(xí)慣,當(dāng)然,對于其他的程序員來說,也是可以借鑒的。

  一、Android編碼規(guī)范

  1、 命名規(guī)范要規(guī)范,取應(yīng)用包名的時(shí)候切忌取太容易重復(fù)的,如果同款手機(jī)已經(jīng)有該包名,那么會因?yàn)楹灻煌鴮?dǎo)致安裝不上,這也怪中國安卓市場太多,無法像Google Play那樣進(jìn)行包名審核ID嵌套樣式問題。Google 有自己的一套命名規(guī)范(多看看 Android 系統(tǒng)源碼就明白了),也可以自行 Google 一下 Java (Android)命名規(guī)范,會由不少的博客介紹。

  2、java代碼中不出現(xiàn)中文,最多注釋中可以出現(xiàn)中文,注釋一方面是幫助自己記憶,另一方面是團(tuán)隊(duì)協(xié)作中的一個規(guī)范ID嵌套樣式問題。好的注釋配合好的命名規(guī)范,可以省去很多溝通上的成本。

  注釋至少要有如下幾方面的內(nèi)容:

  (1)該接口(或類)的作用ID嵌套樣式問題。注意寫的應(yīng)該是作用,而不是你做了什么;

 ?。?)參數(shù)列表的各個參數(shù)說明;

 ?。?)返回值的說明;

  (4)如果有異常拋出ID嵌套樣式問題,對拋出異常的說明;

  (5)如果注釋是在類上的,留個聯(lián)系方式吧,免得以后出了問題都找不到原作者ID嵌套樣式問題。

  3、局部變量命名、靜態(tài)成員變量命名:只能包含字母,單詞除首字母為大寫,其他字母都為小寫ID嵌套樣式問題。

  4、常量命名:只能包含字母和_,字母全部大寫,單詞之間用_隔開ID嵌套樣式問題。

  5、layout中的id命名:命名模式為:view縮寫_模塊名稱_view的邏輯名稱

  view的縮寫詳情如下:

  LinearLayout:ll

  RelativeLayout:rl

  TextView:tv

  ImageView:iv

  ImageButton:ib

  Button:btn

  6、activity中的view變量命名

  命名模式為:view縮寫+邏輯名稱

  建議:如果layout文件很復(fù)雜ID嵌套樣式問題,建議將layout分成多個模塊,每個模塊定義一個moduleViewHolder,其成員變量包含所屬view

  7、strings.xml中的id命名:

  命名模式:activity名稱_功能模塊名稱_邏輯名稱 activity名稱_邏輯名稱 common_邏輯名稱

  strings.xml中ID嵌套樣式問題,使用activity名稱注釋,將文件內(nèi)容區(qū)分開來

  8、drawable中的圖片命名

  命名模式:activity名稱_邏輯名稱/common_邏輯名稱

  9、使用layer-list和selector ID嵌套樣式問題。

  10、圖片盡量分拆成多個可重用的圖片ID嵌套樣式問題。

  11、服務(wù)端可以實(shí)現(xiàn)的,就不要放在客戶端ID嵌套樣式問題。

  12、引用第三方庫要慎重,避免應(yīng)用大容量的第三方庫,導(dǎo)致客戶端包非常大ID嵌套樣式問題。

  13、處理應(yīng)用全局異常和錯誤ID嵌套樣式問題,將錯誤以郵件的形式發(fā)送給服務(wù)端

  14、圖片的 .9處理ID嵌套樣式問題。

  15、使用靜態(tài)變量方式實(shí)現(xiàn)界面間共享要慎重ID嵌套樣式問題。

  16、Log(系統(tǒng)名稱 模塊名稱 接口名稱,詳細(xì)描述)ID嵌套樣式問題。

  17、單元測試(邏輯測試、界面測試)ID嵌套樣式問題。

  18、不要重用父類的handler,對應(yīng)一個類的handler也不應(yīng)該讓其子類用到,否則會導(dǎo)致message.what沖突ID嵌套樣式問題。

  19、activity中在一個View.OnClickListener中處理所有的邏輯ID嵌套樣式問題。

  20、strings.xml中使用%1$s實(shí)現(xiàn)字符串的通配ID嵌套樣式問題。

  21、styles.xml:將layout中不斷重現(xiàn)的style提煉出通用的style通用組件,放到styles.xml中ID嵌套樣式問題。

  22、如果多個Activity中包含共同的UI處理,那么可以提煉一個CommonActivity,把通用部分叫由它來處理,其他activity只要繼承它即可ID嵌套樣式問題。

  23、使用button+activitgroup實(shí)現(xiàn)tab效果時(shí),使用Button.setSelected(true),確保按鈕處于選擇狀態(tài),并使activitygroup的當(dāng)前activity與該button對應(yīng)ID嵌套樣式問題。

  24、如果所開發(fā)的為通用組件,為避免沖突,將drawable/layout/menu/values目錄下的文件名增加前綴ID嵌套樣式問題。

  25、數(shù)據(jù)一定要效驗(yàn)ID嵌套樣式問題,例如:

  字符型轉(zhuǎn)數(shù)字型ID嵌套樣式問題,如果轉(zhuǎn)換失敗一定要有缺省值;

  服務(wù)端響應(yīng)數(shù)據(jù)是否有效判斷ID嵌套樣式問題。

  26、版本控制ID嵌套樣式問題。就算是自己一個人寫代碼,版本控制也是有必要的,Git 也好,SVN 也好,都是有幫助的。版本控制一方面是對自己代碼的一個備份,另一方面,如果想回返回歷史版本也是極有幫助的,所以最好能夠熟悉一下 Git 或者 SVN 的使用。

  27、制作名詞表ID嵌套樣式問題。Android 是圍繞四大組件特別是 Activity 和 Service 進(jìn)行開發(fā)的,但是如果項(xiàng)目龐大,有多個 Activity 存在,那么記住每一個 Activity 的類名是很難得,但是記住每一個 Activity 的功能卻相對容易。這時(shí)名詞表派上用場了,記錄每一個模塊、組件、甚至是每一個 Activity 的官方統(tǒng)一名稱(比如,功能是作品列表的 Activity,名稱就叫作品列表頁,對應(yīng)的類是 WorksListActivity),在溝通過程中,大家(包括測試人員等項(xiàng)目相關(guān)人員)統(tǒng)一說“作品列表頁”。當(dāng)時(shí)的初衷是解決測試團(tuán)隊(duì)的Bug 描述過于模糊(如果有多個列表頁,測試人員往往會寫“列表頁XXX問題”)。

  28、內(nèi)存管理ID嵌套樣式問題。Android 雖然延續(xù)了 Java 的垃圾回收機(jī)制,但是并不意味 Android 應(yīng)用程序就不會出現(xiàn)內(nèi)存問題。在 Android 中引起內(nèi)存開銷過大的往往是 BitMap 對象。BitMap.java實(shí)際上是 Skia 引擎中對圖片處理部分的 Java 層代碼而已(真正工作的是 C++層代碼,通過 JNI 封裝,最后提供 Java 層的接口),那么你創(chuàng)建 BitMap 對象實(shí)際上是創(chuàng)建了兩部分內(nèi)存,一部分是 Java 層的,就是 BitMap對象,Java 的垃圾回收會在合適的時(shí)機(jī)回收這一部分內(nèi)存。另一部分是 C++層面的,也就是通過 JNI 調(diào)用 C++層的代碼分配的那一部分內(nèi)存。Java 的垃圾回收是不會回收這一部分內(nèi)存的,所以如果不手動釋放的話就容易引起內(nèi)存問題。

  二、Android性能優(yōu)化

  1、嵌套樣式問題,設(shè)置連接超時(shí)時(shí)間和響應(yīng)超時(shí)時(shí)間

  嵌套樣式問題。

  2、istview 性能優(yōu)化

  (1)復(fù)用convertView

  在getItemView中,判斷convertView是否為空,如果不為空,可復(fù)用ID嵌套樣式問題。如果couvertview中的view需要添加listerner,代碼一定要在if(convertView==null){}之外。

  (2)異步加載圖片

  item中如果包含有webimageID嵌套樣式問題,那么最好異步加載

  (3)快速滑動時(shí)不顯示圖片

  當(dāng)快速滑動列表時(shí)(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來ID嵌套樣式問題。

  3.使用線程池ID嵌套樣式問題。分為核心線程池和普通線程池,下載圖片等耗時(shí)任務(wù)放置在普通線程池,避免耗時(shí)任務(wù)阻塞線程池后,導(dǎo)致所有異步任務(wù)都必須等待。

  4.異步任務(wù),分為核心任務(wù)和普通任務(wù),只有核心任務(wù)中出現(xiàn)的系統(tǒng)級錯誤才會報(bào)錯,異步任務(wù)的ui操作需要判斷原activity是否處于激活狀態(tài)ID嵌套樣式問題。

  5.盡量避免static成員變量引用資源耗費(fèi)過多的實(shí)例,比如Context ID嵌套樣式問題。

  6.使用WeakReference代替強(qiáng)引用,弱引用可以讓您保持對對象的引用,同時(shí)允許GC在必要時(shí)釋放對象,回收內(nèi)存ID嵌套樣式問題。對于那些創(chuàng)建便宜但耗費(fèi)大量內(nèi)存的對象,即希望保持該對象,又要在應(yīng)用程序需要時(shí)使用,同時(shí)希望GC必要時(shí)回收時(shí),可以考慮使用弱引用。

  7.超級大胖子Bitmap,及時(shí)的銷毀(Activity的onDestroy時(shí),將bitmap回收),設(shè)置一定的采樣率,巧妙的運(yùn)用軟引用drawable對應(yīng)resid的資源,bitmap對應(yīng)其他資源ID嵌套樣式問題。

  8.保證Cursor 占用的內(nèi)存被及時(shí)的釋放掉,而不是等待GC來處理ID嵌套樣式問題。并且 Android明顯是傾向于編程者手動的將Cursor close掉。

  9.線程也是造成內(nèi)存泄露的一個重要的源頭ID嵌套樣式問題。線程產(chǎn)生內(nèi)存泄露的主要原因在于線程生命周期的不可控。

  10.如果ImageView的圖片是來自網(wǎng)絡(luò),進(jìn)行異步加載ID嵌套樣式問題。

  11.應(yīng)用開發(fā)中自定義View的時(shí)候,交互部分,千萬不要寫成線程不斷刷新界面顯示,而是根據(jù)TouchListener事件主動觸發(fā)界面的更新ID嵌套樣式問題。

  12、優(yōu)化網(wǎng)絡(luò)ID嵌套樣式問題。如果沒有網(wǎng)絡(luò)連接,請讓你的應(yīng)用跳過網(wǎng)絡(luò)操作;只在有網(wǎng)絡(luò)連接并且無漫游的情況下更新數(shù)據(jù)。

  13、選擇兼容的數(shù)據(jù)格式,把含有文本數(shù)據(jù)和二進(jìn)制數(shù)據(jù)的請求全部轉(zhuǎn)化成二進(jìn)制數(shù)據(jù)格式請求ID嵌套樣式問題。

  14、使用高效的轉(zhuǎn)換工具,多考慮使用流式轉(zhuǎn)換工具,少用樹形的轉(zhuǎn)換工具ID嵌套樣式問題。

  15、為了更快的用戶體驗(yàn),請減少重復(fù)訪問服務(wù)器的操作ID嵌套樣式問題。如果可以的話,請使用framework的GZIP庫來壓縮文本數(shù)據(jù)以高效使用CPU資源。

  16、優(yōu)化應(yīng)用在前端的工作

  (1)如果考慮使用wakelocks,盡量設(shè)置為最小的級別ID嵌套樣式問題。

  (2)為了防止?jié)撛诘腷ug導(dǎo)致的電量消耗ID嵌套樣式問題,請明確指定超時(shí)時(shí)間;

 ?。?)啟用 android:keepScreenOn屬性ID嵌套樣式問題。

  (4)除了系統(tǒng)的GC操作,多考慮手動回收J(rèn)ava對象,比如XmlPullParserFactory和BitmapFactoryID嵌套樣式問題。還有正則表達(dá)式的Matcher.reset(newString)操作、StringBuilder.setLength(0)操作。

  (5)要注意同步的問題,盡管在主線程中是安全的ID嵌套樣式問題。

 ?。?)在Listview中要多采用重復(fù)利用策略ID嵌套樣式問題。

 ?。?)如果允許的話多使用粗略的網(wǎng)絡(luò)定位而不用GPS,對比一下GPS需要1mAh(25s * 140 mA),而一般網(wǎng)絡(luò)只用0.1mAh(2s * 180mA)ID嵌套樣式問題。

 ?。?)確保注銷GPS的位置更新操作,因?yàn)檫@個更新操作在onPause()中也是會繼續(xù)的ID嵌套樣式問題。當(dāng)所有的應(yīng)用都注銷了這個操作,用戶可以在系統(tǒng)設(shè)置中重新啟用GPS而不浪費(fèi)電量。

 ?。?0)請考慮在大量數(shù)理運(yùn)算中使用低精度變量并在用DisplayMetrics進(jìn)行DPI任務(wù)時(shí)緩存變量值ID嵌套樣式問題。

  17、優(yōu)化工作在前臺的應(yīng)用

 ?。?)請確保service生命周期都是短暫的ID嵌套樣式問題,因?yàn)槊總€進(jìn)程都需要2MB的內(nèi)存,而在前臺程(2)序需要內(nèi)存時(shí)也會重新啟動;

 ?。?)保持內(nèi)存的使用量不要太大;

 ?。?)如果要應(yīng)用每30分鐘更新一次ID嵌套樣式問題,請?jiān)谠O(shè)備處于喚醒狀態(tài)下進(jìn)行;

 ?。?)Service在pull或者sleep狀態(tài)都是不好的ID嵌套樣式問題,這就是為什么在服務(wù)結(jié)束時(shí)要使用.

  (6)AlarmManager或者配置屬性stopSelf()的原因ID嵌套樣式問題。

  18、電池其它注意事項(xiàng)

  (1)在進(jìn)行整體更新之前檢查電池的狀態(tài)和網(wǎng)絡(luò)狀態(tài)ID嵌套樣式問題,等待最好的狀態(tài)再進(jìn)行大幅度裝換操作;

  (2)讓用戶看到用電情況ID嵌套樣式問題,比如更新周期,后臺操作的時(shí)候;

  19、怎么找到布局顯示問題ID嵌套樣式問題?

  當(dāng)我們?yōu)椴季謫为?dú)創(chuàng)建UI的時(shí)候,就是在創(chuàng)建濫用內(nèi)存的App,它在UI中會出現(xiàn)可惡的延時(shí)ID嵌套樣式問題。要實(shí)現(xiàn)一個流暢的、低內(nèi)存占用的UI,第一步就是搜索你的應(yīng)用找出潛在的瓶頸布局。使用Android SDK/tools/中自帶的Hierarchy Viewer Tool工具。還有一個很好的工具就是Lint,它會掃描應(yīng)用的源碼去尋找可能存在的bug,并為控件結(jié)果進(jìn)行優(yōu)化。

  10、解決問題ID嵌套樣式問題。如果布局顯示結(jié)果發(fā)現(xiàn)了問題,你可以考慮簡化布局結(jié)構(gòu)。可以把LinearLayout類型轉(zhuǎn)化成RelativeLayout類型,降低布局的層級結(jié)構(gòu)。

  三、Android UI優(yōu)化

  1、layout組件化,盡量使用merge及include復(fù)用ID嵌套樣式問題。

  2、使用styles,復(fù)用樣式定義ID嵌套樣式問題。

  3、軟鍵盤的彈出控制,不要讓其覆蓋輸入框ID嵌套樣式問題。

  4、數(shù)字、字母和漢字混排占位問題:將數(shù)字和字母全角化ID嵌套樣式問題。由于現(xiàn)在大多數(shù)情況下我們的輸入都是半角,所以 字母和數(shù)字的占位無法確定,但是一旦全角化之后,數(shù)字、字母的占位就和一個漢字的占位相同了,這樣就可以避免由于占位導(dǎo)致的排版問題。

  5、英文文檔排版:textview自動換行時(shí)要保持單詞的完整性,解決方案是計(jì)算字符串長度,然后手動設(shè)定每一行顯示多少個字母并加上‘n’ID嵌套樣式問題。

  6、復(fù)雜布局使用RelativeLayout ID嵌套樣式問題。

  7、自適應(yīng)屏幕,使用dp替代pix ID嵌套樣式問題。

  8、使用android:layout_weight或者TableLayout制作等分布局ID嵌套樣式問題。

  9、使用animation-list制作動畫效果ID嵌套樣式問題。

  10、千萬不要阻塞用戶主線程ID嵌套樣式問題。用戶主線程就是 UI 線程,主要負(fù)責(zé) UI 的繪制(除 SurfaceView 外,其他 View 對象都是需要在 UI 線程中進(jìn)程操作的)。為了保證 App 的交互盡可能的流程,請不要在 UI 線程中進(jìn)行耗時(shí)操作(文件讀寫、秒)。

  四、給Android開發(fā)工程師的建議

021yin.com /book/zh/v2

  2、勤做總結(jié),推薦使用印象筆記,把一些懂的經(jīng)驗(yàn)總結(jié)起來,把還不懂的文章掛里面,有時(shí)間就慢慢消化ID嵌套樣式問題。

  3、定期code review,不斷迭代,你總會發(fā)現(xiàn)一些不合理的代碼,或者需要優(yōu)化的地方ID嵌套樣式問題。

021yin.com ,stormzhang,但總歸來說,去Android官網(wǎng)或者參考一份Java API文檔雖說枯燥,但熟悉之后,你會有更大的進(jìn)步ID嵌套樣式問題。另外,善用 Google 。

021yin.com/u/levi/p/imouto-host/git

  5、如想更深入了解可閱讀珍藏許久的文章《Android應(yīng)用程序開發(fā)以及背后的設(shè)計(jì)思想深度剖析》ID嵌套樣式問題。

  6、如果你公司沒有強(qiáng)大的測試團(tuán)隊(duì),發(fā)布應(yīng)用前最好把應(yīng)用放到測試平臺去測測,比如云測之類的ID嵌套樣式問題。

  7、不要重復(fù)制造輪子ID嵌套樣式問題。這個適用于代碼層面以及業(yè)務(wù)層面。

  四、應(yīng)用層的開發(fā)

  1、寫代碼前先在本子上畫好大概的模塊圖,類圖,能和同事討論下最好ID嵌套樣式問題。

  2、使用開源代碼務(wù)必搞懂主要實(shí)現(xiàn)方式,以便填坑ID嵌套樣式問題。

  3、應(yīng)用內(nèi)的資源要統(tǒng)一管理,如線程,緩存,網(wǎng)絡(luò),數(shù)據(jù)庫,配置,設(shè)備事件監(jiān)聽等等,以便性能分析和維護(hù)ID嵌套樣式問題。

  4、合理使用設(shè)計(jì)模式,做好UI之間,和業(yè)務(wù)以及數(shù)據(jù)層的解耦非常必要,以便應(yīng)付產(chǎn)品汪(褒義詞)的各種變化ID嵌套樣式問題。

  5、不要總是TODO,因?yàn)橄枇粝戮土粝铝耍?還得寫新的翔,等后來的童鞋來收拾,被人罵罵也不好ID嵌套樣式問題。

  6、沒事多看下Github,Android程序基本可以用一個個開源庫搭積木搞出來,當(dāng)然業(yè)務(wù)除外ID嵌套樣式問題。也可以看看其他平臺的庫和各種框架,不要把自己局限在Android上。

  7、代碼風(fēng)格團(tuán)隊(duì)要統(tǒng)一ID嵌套樣式問題。

  8、提高基本素質(zhì),做程序員,而不是Android程序員ID嵌套樣式問題。

  9、使用StrictMode來檢查UI線程中可能潛在的費(fèi)時(shí)操作ID嵌套樣式問題。

  10、使用一些特殊的工具如Systrace或者Traceview來尋找在你的應(yīng)用中的瓶頸ID嵌套樣式問題。

  11、用進(jìn)度條向用戶展示操作進(jìn)度ID嵌套樣式問題。

  12、如果初始化操作很費(fèi)時(shí),請展示一個歡迎界面ID嵌套樣式問題。

  13、優(yōu)化設(shè)備的電池壽命ID嵌套樣式問題。如果應(yīng)用很費(fèi)電,請不要責(zé)怪用戶卸載了你的應(yīng)用。對于電池使用來說,主要費(fèi)電情況如下:

  (1)更新數(shù)據(jù)時(shí)經(jīng)常喚醒程序;

 ?。?)用EDGE或者3G來傳遞數(shù)據(jù);

 ?。?)文本數(shù)據(jù)轉(zhuǎn)換,進(jìn)行非JIT正則表達(dá)式操作ID嵌套樣式問題。

  五、其他的一些 Android 開發(fā)建議:

  1、嚴(yán)格把控生命周期(Activity、Service、ContentProvider 等)ID嵌套樣式問題。在每一個生命周期事件中,明確應(yīng)該做什么不應(yīng)該做什么是很有必要的,不然也會容易造成各種莫名其妙的問題(比如 onCreate 中使用了 onResume 中才初始化的對象)。

  2、在使用 XML 文件進(jìn)行 UI 布局時(shí),應(yīng)該盡量減少 Layout 的嵌套層級ID嵌套樣式問題。Layout 的過度嵌套會造成渲染時(shí)資源開銷過大的問題。

  PS: XML 也是代碼ID嵌套樣式問題,注意維護(hù)好 XML 的可讀性!

  3、資源文件的使用,資源文件包括圖片、字符串、尺寸、顏色等等ID嵌套樣式問題。在使用尺寸資源的時(shí)候應(yīng)該盡量使用像素?zé)o關(guān)的單位,比如 dp 和 sp。而字符串資源(比如 Button 上顯示的名稱)也應(yīng)該盡可能的抽離出來,使用 res/value 下的xml 文件進(jìn)行維護(hù)。一方面方便日后管理,另一方面方便國際化。

  4、多線程以及線程池的使用ID嵌套樣式問題。前面說過應(yīng)該盡量避免在主線程中執(zhí)行耗時(shí)操作,那么多線程就變得很有必要。對于 Java 來說,線程的創(chuàng)建與銷毀是非常占用資源的,線程的濫用(隨手 new Thread 等)會造成 App 整體性能的下降。Java 提供了Executors的線程池方案,而 Android 自身也提供了AsyncTask 這樣的異步任務(wù)方案(實(shí)際上也是線程池)。

  5、Java 的權(quán)限控制機(jī)制ID嵌套樣式問題。Java提供了public, private, protected 三個訪問權(quán)限修飾詞,提供了以下四種訪問權(quán)限控制機(jī)制:

 ?。?)包訪問權(quán)限;

 ?。?)Public訪問權(quán)限;

 ?。?)Private訪問權(quán)限;

 ?。?)Protected訪問權(quán)限;

  訪問權(quán)限的合理使用可以有效地隱藏實(shí)現(xiàn),避免將不必要的數(shù)據(jù)或接口暴露出來ID嵌套樣式問題。

  6、 final 和 static 關(guān)鍵字的合理使用ID嵌套樣式問題。很多人覺得這是很基礎(chǔ)的東西,但是 final 和 static 關(guān)鍵字的合理使用能夠有效提升代碼的執(zhí)行效率,而不合理使用則后患無窮。

  7、 Android 設(shè)備的內(nèi)存資源是極度珍貴的,合理的使用、回收內(nèi)存也是一種好的編程習(xí)慣ID嵌套樣式問題。Java 對象的引用類型會影響到垃圾回收對象的時(shí)機(jī)。Java 有強(qiáng)引用、 軟引用、 弱引用、虛引用,以及 Android 增加的 Lru 內(nèi)存管理。建議題主了解一下這四種引用類型的特點(diǎn)以及 Lru 內(nèi)存管理的具體實(shí)現(xiàn)。

  8、 接口和抽象類ID嵌套樣式問題。這是老生常談的話題了,但卻是永恒的話題。接口和抽象類的合理使用,可以增加代碼的可維護(hù)性和擴(kuò)展性。接口和抽象類也是各種設(shè)計(jì)模式的基石。

  9、軟件設(shè)計(jì)的六大設(shè)計(jì)原則ID嵌套樣式問題,即

  (1)針對接口編程ID嵌套樣式問題,不針對實(shí)現(xiàn)編程

  (2)單一職責(zé)原則

 ?。?)開放封閉原則

  (4)里氏代換原則

 ?。?)迪米特法則

 ?。?)合成聚合復(fù)用原則

  10、統(tǒng)一項(xiàng)目的編碼格式(推薦使用 UTF-8)ID嵌套樣式問題。如果多人協(xié)作,這種舉措顯得尤為重要。由此引申出來的另外一個規(guī)范就是,規(guī)范統(tǒng)一命名風(fēng)格,即團(tuán)隊(duì)中使用相同的命名風(fēng)格。

  11、TextView(往往 TextView 派生子類同樣適用)調(diào)用 setText 方法設(shè)置一個 int 型的數(shù)據(jù)ID嵌套樣式問題,千萬要將該值轉(zhuǎn)為 String,否則在某些設(shè)備中它會默認(rèn)去查詢 R 文件中定義的資源

  12、使用友盟分享 SDK,需要執(zhí)行分享的 Activity 請不要為該 Activity 設(shè)置android:process屬性ID嵌套樣式問題。比如你的 App 運(yùn)行在 com.codingfish.test 進(jìn)程,需要產(chǎn)生分享動作的Activity 設(shè)置 android:proces=":com.codingfish.hello" ,那么新浪微博就會出現(xiàn)你設(shè)置的分享內(nèi)容沒有顯示的問題。該 Bug 已經(jīng)提交給友盟的技術(shù)人員,但是很久沒有得到修復(fù)。

  13、上線之前一定要使用正式簽名打包ID嵌套樣式問題。某朋友公司 Android 的應(yīng)用上架之前,負(fù)責(zé)打包上線的童鞋(新人,老人已離職,只有這一個Android)沒有簽名的概念,直接將 Debug 簽名的 Apk 投放到渠道了,到現(xiàn)在還有一批設(shè)備沒有替換回來。

  14、在 Activity 中盡可能少的創(chuàng)建 Handler 對象,創(chuàng)建一個主線程 Handler,一個后臺 HandlerThread 就可以了ID嵌套樣式問題。

  15、使用線程的地方盡量不要 new Thread,而是使用 AsyncThread ID嵌套樣式問題。

  16、 onCreate(Bundle savedInstanceState) 切記將super.onCreate(savedInstanceState);放在一切業(yè)務(wù)的前面ID嵌套樣式問題。

  17、 創(chuàng)建了四大組件一定記得要在 AndroidManifest 文件中聲明(當(dāng)然 BroadcastReceiver 可以動態(tài)注冊)ID嵌套樣式問題。

  18、 為Activity聲明系統(tǒng)配置變更事件 系統(tǒng)配置變更事件是指轉(zhuǎn)屏,區(qū)域語言發(fā)生變化,屏幕尺寸發(fā)生變化等等,如果Activity沒有聲明處理這些事件,發(fā)生事件時(shí),系統(tǒng)會把Activity殺掉然后重啟,并嘗試恢復(fù)狀態(tài),Activity有機(jī)會通過onSaveInstanceState()保存一些基本數(shù)據(jù)到Bundle中,然后此Bundle會在Activity的onCreate()中傳遞過去ID嵌套樣式問題。雖然這貌似正常,但是這會引發(fā)問題,因?yàn)楹芏嗥渌臇|西比如Dialog等是要依賴于具體Activity實(shí)例的。所以這種系統(tǒng)默認(rèn)行為通常都不是我們想要的。

  為了避免這些系統(tǒng)默認(rèn)行為ID嵌套樣式問題,就需要為Activity聲明這些配置,如下二個是每個Activity必須聲明的:

  activity android:configChanges="orientation|keyboardHidden"

  幾乎所有的Activity都要聲明如上ID嵌套樣式問題,為什么Android不把它們變成Default的呢?

  19、 盡量使用Android的API 這好像是廢話ID嵌套樣式問題,在Android上面開發(fā)不用Android API用什么?因?yàn)锳ndroid幾乎支持Java SE所有的API,所以有很多地方Android API與Java SE的API會有重復(fù)的地方,比如說對于文件的操作最好使用Android里面Context封裝的API,而不要直接使用File對象:

  Context.openFileOutput(String); // no File file = new File(String)

  原因就是API里面會考慮到Android平臺本身的特性;再如,少用Thread,而多使用AsyncTask等ID嵌套樣式問題。

  20、 要考慮到Activity和進(jìn)程被殺掉的情況 如了通常情況退出Activity外,還有Activity因其他原因被殺的情況,比如系統(tǒng)內(nèi)存過低,系統(tǒng)配置變更,有異常等等,要考慮和測試這種情況,特別是Activity處理重要的數(shù)據(jù)時(shí),做好的數(shù)據(jù)的保存ID嵌套樣式問題。

  21、語言要簡潔ID嵌套樣式問題。有些語言真的很啰嗦,中文或英文很簡短就能表達(dá)的事情到了其他語言就變的死長死長的,所以如果是wrap_content就可能把其他控制擠出可視范圍; 如果是指定長度就可能顯示不全。也要注意特殊語言比如那些從右向左讀的語言。

  PS:有代碼潔癖的,很注重代碼質(zhì)量的程序員,可以詳盡閱讀 SonarQube 關(guān)于JAVA編碼的規(guī)則:Sonar@OSC - 代碼質(zhì)量分析平臺,如果條件允許,自己配置一下,每周通過Sonar運(yùn)行一下自己的代碼,以提高代碼質(zhì)量ID嵌套樣式問題。

  22、不要用四大組件去實(shí)現(xiàn)接口ID嵌套樣式問題。一是組件的對象都比較大,實(shí)現(xiàn)接口比較浪費(fèi),而且讓代碼更不易讀和理解;另外更重要的是導(dǎo)致多方引用,可能會引發(fā)內(nèi)存泄露。

  23、 用getApplication()來取Context當(dāng)參數(shù) 對于需要使用Context對象作為參數(shù)的函數(shù),要使用getApplication()獲取Context對象當(dāng)參數(shù),而不要使用this,除非你需要特定的組件實(shí)例!getApplication()返回的Context是屬于Application的,它會在整個應(yīng)用的生命周期內(nèi)存在,遠(yuǎn)大于某個組件的生命周期,所以即使某個引用長期持有Context對象也不會引發(fā)內(nèi)存泄露ID嵌套樣式問題。

  24、主線程只做UI控制和Frameworks回調(diào)相關(guān)的事ID嵌套樣式問題。附屬線程只做費(fèi)時(shí)的后臺操作。交互只通過Handler。這樣就可以避免大量的線程問題。

  25、Frameworks的回調(diào)不要做太多事情僅做必要的初始化,其他不是很重要的事情可以放到其他線程中去做,或者用Handler Schedule到稍后再做ID嵌套樣式問題。

  26、要考慮多分辨率 至少為hdpi, mdpi, ldpi準(zhǔn)備圖片和布局ID嵌套樣式問題。元素的單位也盡可能的使用dip而不要用px。

  27、利用Android手機(jī)的硬鍵 幾乎所有的Android手機(jī)都有BACK和MENU,它們的作用是返回和彈出菜單,所以就不要再在UI中設(shè)計(jì)返回按扭和菜單按扭ID嵌套樣式問題。很多優(yōu)秀的應(yīng)用如隨手記和微信都有返回鍵,他們之所以有是因?yàn)樗麄兌际菑膇OS上移植過來的,為了保存體驗(yàn)的一致,所以也有了返回和菜單。但這不夠Android化,一個純正的Android是沒有必須重復(fù)硬鍵的功能的。

  PS:多看看官方的 APIDEMO,多讀一下Android 上的內(nèi)容ID嵌套樣式問題。

  28、如果你的IDE是EclipseID嵌套樣式問題,用好這幾個快捷鍵,爽歪歪哦:

  (1)CTRL + SHIFT + O

 ?。?)ALT + SHIFT + M

 ?。?)ALT + SHIFT + S

 ?。?)CTRL + O

  (5)CTRL + /

 ?。?)ALT + /

  (7)CTRL + D

 ?。?)CTRL + K

  (9)ALT + → 和 ALT + 左箭頭

 ?。?0)CTRL + SHIFT + X 和 CTRL + SHIFT + Y

 ?。?1)F5、F6、F7、F8

 ?。?2)F11

 ?。?3)CTRL + M

  六、程序員的工作習(xí)慣

  1、一定要寫筆記ID嵌套樣式問題。你可以不寫博客,但是一定要有筆記。好記性不如爛筆頭。當(dāng)然對于程序員來說,一個電子的筆記遠(yuǎn)遠(yuǎn)好與紙質(zhì)的筆記。

  2、寫博客ID嵌套樣式問題。博客是附帶品.但是你只有去寫博客了,才知道別人的博客是怎么寫出來了。博客也是你和別人交流技術(shù)的東西.別人可以從你文章中學(xué)習(xí)東西,你可以與別人交流.

  PS:調(diào)查發(fā)現(xiàn),寫博客的程序員工資要搞那么5000+ID嵌套樣式問題。

  3、盡量閱讀英文文檔,而不是有問題就百度.有問題問Strack Overflow ID嵌套樣式問題。

  4、不要等別人告訴你這東西怎么用,那東西怎么學(xué),只有自己去提前研究了,你才能更勝一籌ID嵌套樣式問題。

  5、保持不斷學(xué)習(xí)ID嵌套樣式問題。

  文/漫步、張明云、captain(知乎作者)

0
0
收藏0
回帖

上海育創(chuàng)整理的《進(jìn)BAT公司必備的Android 開發(fā)寶典》 期待您的回復(fù)!

取消
載入表情清單……
載入顏色清單……
插入網(wǎng)絡(luò)圖片

取消確定

圖片上傳中
編輯器信息
提示信息