Android開發(fā)規(guī)范參考文檔.doc_第1頁
Android開發(fā)規(guī)范參考文檔.doc_第2頁
Android開發(fā)規(guī)范參考文檔.doc_第3頁
Android開發(fā)規(guī)范參考文檔.doc_第4頁
Android開發(fā)規(guī)范參考文檔.doc_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Android開發(fā)參考文檔一、Android編碼規(guī)范1. java代碼中不出現(xiàn)中文,最多注釋中可以出現(xiàn)中文.xml代碼中注釋2. 成員變量,局部變量、靜態(tài)成員變量命名、常量(宏)命名 1). 成員變量: activity中的成員變量以m開頭,后面的單詞首字母大寫(如Button mBackButton; String mName);實體類和自定義View的成員變量可以不以m開頭(如ImageView imageView, String name),2). 局部變量命名:只能包含字母,組合變量單詞首字母出第一個外,都為大寫,其他字母都為小寫3). 常量(宏)命名: 只能包含字母和_,字母全部大寫,單詞之間用_隔開 UMENG_APP_KEY3. Application命名 項目名稱+App, 如SlimApp,里面可以存放全局變量,但是杜絕存放過大的實體對象4. activity和其中的view變量命名activity命名模式為:邏輯名稱+Activityview命名模式為:邏輯名稱+View 建議:如果layout文件很復雜,建議將layout分成多個模塊,每個模塊定義一個moduleViewHolder,其成員變量包含所屬view5. layout及其id命名規(guī)則layout命名模式:activity_邏輯名稱,或者把對應的activity的名字用“_”把單詞分開。命名模式為:view縮寫_模塊名稱_view的邏輯名稱, 用單詞首字母進行縮寫view的縮寫詳情如下LayoutView:lvRelativeView:rvTextView:tvImageView:ivImageButton:ibButton:btn6. strings.xml中的1). id命名模式:activity名稱_功能模塊名稱_邏輯名稱/activity名稱_邏輯名稱/common_邏輯名稱,strings.xml中,使用activity名稱注釋,將文件內(nèi)容區(qū)分開來2). strings.xml中使用%1$s實現(xiàn)字符串的通配,合起來寫7. drawable中的圖片命名命名模式:activity名稱_邏輯名稱/common_邏輯名稱/ic_邏輯名稱(邏輯名稱: 這是一個什么樣的圖片,展示功能是什么)8. styles.xml將layout中不斷重現(xiàn)的style提煉出通用的style通用組件,放到styles.xml中;9. 使用layer-list和selector,主要是View onCclick onTouch等事件界面反映10. 切圖需求1). 多圖片組合的,盡量分拆成多個可重用的圖片,避免一個圖片太大.2). 盡量使用.9圖片,自動適配適配界面。11.服務端可以實現(xiàn)的,就不要放在客戶端1). 圖片過大時,服務端壓縮圖片后返回來可減少很多問題出現(xiàn)2). 及時更新的數(shù)據(jù),盡管本地有緩存12. 引用第三方庫要慎重,避免應用大容量的第三方庫,導致客戶端包非常大,或者其他非本應用的信息會出現(xiàn),影響體驗。13. 處理應用全局異常和錯誤,將錯誤以郵件的形式發(fā)送給服務端14. 使用靜態(tài)變量方式實現(xiàn)界面間共享要慎重15. Log(TAG,詳細描述), 加開關,打包時關掉log,提高運行速度。如if (SlimConf.DEBUG) Log.d(TAG, plan_init_enabled= + plan_init_enabled);16. 單元測試(邏輯測試、界面測試),避免次生問題隨著解決問題增加。17. 不要重用父類的handler,對應一個類的handler也不應該讓其子類用到,否則會導致msg.what沖突,方法是聲明父類handler為private18. activity中的ListenerActivity只用一個View.OnClickListener, View.OnTouchListener等Listener中處理所有控件的邏輯,即,XXActivity impliments OnClickListener方式實現(xiàn)接口,綁定周期,減少接口實例數(shù)量注意:盡量不要給每個點擊控件設置一個View.OnClickListener實例19. 如果多個Activity中包含共同的UI處理,那么可以提煉一個AbsXXActivity.java或者XXActivityBase.java,可以是一個抽象類,把通用部分叫由它來處理,其他activity只要繼承它即可,可以是一個抽象activity,子類定義具體需求的函數(shù)(重載或者重寫)20. 使用button+activitgroup實現(xiàn)tab效果時,使用Button.setSelected(true),確保按鈕處于選擇狀態(tài),并使activitygroup的當前activity與該button對應21. 如果所開發(fā)的為通用組件,為避免沖突,將drawable/layout/menu/values目錄下的文件名增加前綴22.數(shù)據(jù)一定要效驗,例如字符型轉數(shù)字型,如果轉換失敗一定要有缺省值;if(object instanceof User)服務端響應數(shù)據(jù)是否有效判斷;23.有的按鈕要避免重復點擊,避免重復發(fā)送幾個http請求或耗時任務等。方法:點擊之后setEnable(false), 一段時間之后setEnable(true),24. 復雜循環(huán)體超過8行時,需要在外部加注釋;25. 方法,函數(shù)名字盡量體現(xiàn)其功能含義(函數(shù)名能完全體現(xiàn)功能是可以不要注釋;函數(shù)中的注釋一定按照縮進格式注釋。函數(shù)內(nèi)部單行注釋寫在該行上面);26. 函數(shù)行數(shù)盡量不能超過100(if,for語句中的行數(shù)不能超過50,超過時,提出來作為函數(shù)使用(Switch除外)。27. 同一個類文件中不能出現(xiàn)雷同的code段,相同的部分提出來作為函數(shù)使用,或者使用函數(shù)重載,用參數(shù)的數(shù)量和類型來控制其功能區(qū)別。二、Android性能優(yōu)化1. http可以用gzip壓縮,設置連接超時時間和響應超時時間http請求按照業(yè)務需求,分為是否可以緩存和不可緩存,那么在無網(wǎng)絡的環(huán)境中,仍然通過緩存的httpresponse瀏覽部分數(shù)據(jù),實現(xiàn)離線閱讀??梢源嬖跀?shù)據(jù)庫,下次繼續(xù)使用2. listview 性能優(yōu)化1). Adapter 的getView中復用convertView在getView中,判斷convertView是否為空,如果不為空,可復用。如果couvertview中的view需要添加listerner,代碼一定要在if(convertView=null)之外。不要在里面輕易地new對象,其數(shù)量隨著item數(shù)量增加2). 異步加載圖片item中如果包含有webimage,那么最好異步加載3). 快速滑動時不顯示圖片當快速滑動列表時(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE 和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來4). list中異步加載的圖片,當不在可視范圍內(nèi),按照一定的算法及時回收(如在當前可視范圍的上下10條item以外的圖片進行回收,或者將圖片進行緩存,設置一個大小,按照最近最少使用原則超過部分進行回收)5). BaseAdapter避免內(nèi)存溢出如果BaseAdapter的實體類有屬性非常消耗內(nèi)存,可以將保存到文件;為提高性能,可以進行緩存,并限制緩存大小,退出界面后釋放資源。3. 使用線程池,分為核心線程池和普通線程池,下載圖片等耗時任務放置在普通線程池,避免耗時任務阻塞線程池后,導致所有異步任務都必須等待4. 異步任務,分為核心任務和普通任務,只有核心任務中出現(xiàn)的系統(tǒng)級錯誤才會報錯,異步任務的ui操作需要判斷原activity是否處于激活狀態(tài),否則,跳出run函數(shù)1). 主線程不要進行網(wǎng)絡處理; 2). 主線程不要進行數(shù)據(jù)庫處理; 3). 主線程不要進行文件處理;new Thread 處理完成后, send message to Handler notify UI thread to update UI5. 盡量避免static成員變量引用資源耗費過多的實例,比如Context,多以引用的的形式出現(xiàn)。1)不要在project Application的子類中使用過多或者過大的實體變量2)需要使用較大的全局變量時,使用單例instance來實現(xiàn),保持項目中只有一份實例6 .使用WeakReference或SoftReference代替強引用,弱引用可以讓您保持對對象的引用,同時允許GC在必要時釋放對象,回收內(nèi)存。對于那些創(chuàng)建便宜但耗費大量內(nèi)存的對象,即希望保持該對象,又要在應用程序需要時使用,同時希望GC必要時回收時,可以考慮使用弱引用。如:Aa=newA(); a.str=Hello,reference; WeakReferenceweak=newWeakReference(a); 7. 占內(nèi)存的Bitmap及時的銷毀(Activity的onDestroy時將bitmap回收,在被UI組件使用后馬上進行回收會拋RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap)設置一定的采樣率(有開發(fā)者提供的圖片無需進行采樣,對于有用戶上傳或第三方的大小不可控圖片,可進行采樣減少圖片所占的內(nèi)存),從服務端返回圖片,建議同時反饋圖片的size巧妙的運用軟引用drawable對應resid的資源,bitmap對應其他資源任何類型的圖片,如果獲取不到(例如文件不存在,或者讀取文件時跑OutOfMemory異常),應該有對應的默認圖片(默認圖片放在在apk中,通過resid獲取);8. Drawable目錄下的圖片ui組件需要用到的圖片是apk包自帶的drawable-目錄下的圖片,那么一律用setImageResource或者setBackgroundResource,而不要根據(jù)resourceid,無形中構造了對象注意:get(getResources(), R.drawable.btn_achievement_normal)該方法通過resid轉換為drawable,需要考慮回收的問題,如果drawable是對象私有對象,在對象銷毀前是肯定不會釋放內(nèi)存的。9. 保證Cursor 占用的內(nèi)存被及時的釋放掉,而不是等待GC來處理。并且 Android明顯是傾向于編 程者手動的將Cursor close掉(但是不要翻來覆去的打開和關閉數(shù)據(jù)庫,耗時)10. 線程也是造成內(nèi)存泄露的一個重要的源頭。線程產(chǎn)生內(nèi)存泄露的主要原因在于線程 生命周期的不可控,設置開關boolean flag,退出界面,或者應用是跳出線程。避免莫名其妙的更新UI,造成錯誤11. 如果ImageView的圖片是來自網(wǎng)絡,進行異步加載,注意,盡量緩存,減少請求次數(shù)12. 應用開發(fā)中自定義View的時候,交互部分,千萬不要寫成線程不斷刷新界面顯示(如onResume()函數(shù)中刷新),而是根據(jù)TouchListener事件主動觸發(fā)界面的更新13. 復用、回收Activity對象臨時的activity及時手動finish主界面設置為singleTask一般界面設置為singleTop14.位置信息獲取用戶的地理位置信息時,在需要獲取數(shù)據(jù)的時候打開GPS,之后及時關閉掉15.在onResume時設置該界面的電源管理,在onPause時取消設置16. 模塊之間的交互使用接口來定義,上下層次關系,數(shù)據(jù)層與控制層之間外部調用只關注接口函數(shù)名和參數(shù),內(nèi)部實現(xiàn)不考慮,外人調用出現(xiàn)問題時,負責人修改內(nèi)部實現(xiàn),調用者不要輕易修改,免得引發(fā)次生問題,(僅限于以上關系,其他另外考慮)17. 工具類的函數(shù)名要根據(jù)功能來起名,盡量加上注釋,方便以后調用,修改。1)類似功能的要用重載,用參數(shù)來控制功能區(qū)別2) 同一個文件(甚至項目中)不要出現(xiàn)相同的代碼段,可以提出來當函數(shù)公用./* * download image bitmap from net, and add to cache ,files * param context * param url * param handler * param isLoadPrompt * param isNoNetPrompt */public void downloadNetBitmap(final Context context, final String url, final Handler handler, boolean isLoadPrompt, boolean isNoNetPrompt) 三、AndroidUI優(yōu)化1. layout組件化,盡量使用merge及include復用,復雜布局使用RelativeLayout,避免其他手機運行后看不見空間的情況。2. 使用styles,復用樣式定義,降低xml的臃腫,風格統(tǒng)一,修改時一勞永逸。3. 軟鍵盤的彈出控制,不要讓其覆蓋輸入框4. 數(shù)字、字母和漢字混排占位問題:將數(shù)字和字母全角化。由于現(xiàn)在大多數(shù)情況下我們的輸入都

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論