編輯:關於Android編程
1、子線程中不能更新界面,更新界面必須在主線程中進行
2、Fragment注意的事項:
a) Activity調用Fragment中的方法
b) Thread或者Handler調用Fragment中的方法
需要注意getActivity()可能為空;需要加入下面代碼避免空指針
If(getActivity() == null || !isAdd()){
return;
}
3、String類型的常量和變量相互比較要使用常量equals變量,因為變量可能為空;
If(常量.equals(變量)){
...
}
4、Activity或者Fragment中的BroadCastReceiver設置監聽和取消監聽要成對出現。onReceive方法中調用外部類要判空
5、網絡操作不能在主線程中調用
6、Activity銷毀之前必須先銷毀附屬在Activity上的Dialog;不能出現Activity銷毀後,還操作Dialog對象的情況
7、使用數據庫的時候要注意到數據庫死鎖的問題。如果數據庫沒有做同步處理,必須在主線程中調用db,保證db不被lock
8、Try catch 不能使用log打印錯誤信息,避免出現空指針。使用e.printStackTrace()打印錯誤信息
9、打開的流資源一定要關閉,比如文件讀寫,數據庫讀寫
10、Static引用的Map或者List集合要手動釋放,盡量不要使用static引用集合
11、遍歷集合的時候不能對集合進行增刪。常出現在多線程中
12、一個方法不能過長,方法過長要拆分成幾個方法
13、判斷條件比較多的情況下,盡量使用衛語句取代嵌套條件表達式,例如:
If(!file.exist()){
return;
}
這樣可以避免層次太深,維護代碼時更關注主要邏輯,忽略非法情況
14、Do not keep long-lived references to a context-activity(a reference to an activity should have the same life cycle as the activity itself)
15、Try using the context-application instead of a context-activity
16、Avoid nonstatic inner classes in an activity if you don’t control their life cycle,use a static inner class and
make a weak reference to the activity inside.The solution to the issue is to use a static inner class with
a WeakReference to the outer class, as done in ViewRoot and its W inner class for instance.
(創建handler的時候要使用static內部類,否則會出現內存洩露)
17、Android UI 布局中文字使用sp單位,其它的使用dp單位,不能使用px單位
18、一個方法內層級太深,可以使用衛語句減少層級,可以抽出多個方法,減少代碼量
19、盡量少使用BroadcastReceiver,頻繁使用廣播會造成
a) 多對多調用
b) 傳遞參數很隨意不受控制
c) 像指針一樣,沒有堆棧信息,碰到問題不容易解決
d) 破壞了類的封裝性,違反了高內聚低耦合原則
20、能不使用Handler的情況下,盡量少使用Handler
a) 傳遞參數很隨意不受控制,維護成本高
b) 異步消息接到後,界面狀態需要判斷,可能界面已經銷毀
c) 使用了Handler,一定要控制一個類的范圍內,不能將Handler傳遞到其他類中去,因為這樣會破壞類的封裝性
d) 像指針一樣,沒有堆棧信息,碰到問題不容易解決。這條相對BroadcastReceiver容易,因為在一個類內,找起來相對容易
21、編程要遵循高內聚、低耦合原則。類和類之間要盡量降低耦合性,一個類盡量少的依賴其它類裡的屬性或者方法
22、圖片管理方法可以采用Universal-image-loader
23、Boolean型變量前綴使用has或者is
24、不能使用System.out.println打印log
25、變量命名不能1,2,3,4...後綴,要看名知意
26、If方法要有{}包裹
27、Log的tag不能是””
28、統一使用format和import格式開發
29、代碼中不能出現硬編碼(使用與配置分離,或者通過參數的方式,或者通過面向接口編程)
在Android開發中有時候代碼為了方便直接硬編碼,其實這是一種不好的習慣,在PC平台寫代碼可能直接使用的比較多。在移動平台上有時要考慮多國語言問題,Android設計了getString()方法從資源Res文件夾中讀取String字符串,這些字符串以xml形式保存在Values.xml文件中。Android平台在一定程度上更面向對象,除了Java本身,在構架上仍然使用MVC這樣的UI和代碼邏輯分離,UI可以專心的設計用戶界面,代碼可以通過類似Jar或MIDL文件來再發行應用,大大提高了代碼復用和維護性。
上面都是硬編碼的壞處,其實好處也是有的,從單獨語言和簡單程序來說具有運行效率高和設計簡單等方法,但是對於復雜的工程還是建議MVC方式設計比較合理。Android對於資源文件進行了緩存機制,在R類中進行全局注冊,也就是說findViewById之後會對這個xml文件做緩存,比如Layout或String。
30、不能在for循環中進行獨立的數據庫操作
31、不能使用ScrollView包裹ListView/GridView/ExpandableListVIew;因為這樣會把ListView的所有Item都加載到內存中,要消耗巨大的內存和cpu去繪制圖面
以上內容是基於過往開發經驗(自己和同事的)進行的總結,如有不妥之處還請指正,歡迎大家一起提出自己的想法,該篇博客我會持續更新...,希望大家共同進步!
今天我們來看看自定義ProgressBar,在這個過程中,我們順便來看看自定義View中兩個非常關鍵的方法,一個是View的測量,還有一個是自定義屬性。OK,廢話不多說,
正文 進入正題,主要講解viewpager+fragment實現微信滑動切換頁面的功能,並且附帶切換效果,功能其實並不難,只是需要把知識點關聯起來1.分析用到的知識點(1
一、前言論學習心態:每當進入一個新的工作環境,處於一種新的領域時,人總是會變得急功近利,特別是當任務緊急時,人總是會想著不斷的從網上搜尋答案,不斷的去尋問他人,十足的拿來
本文是自己學習所做筆記,歡迎轉載,但請注明出處:http://blog.csdn.net/jesson20121020 在Android的UI開發中經常會遇