Android開發問題筆記

一、Toolbar問題:最低版本15,必須使用support,才能使用Toolbar,Toobar是5.0引入的
二、BottomTab:這個用TabLayout解決了html

三、後端API最好採用一個成熟的框架來作,好比Restful的Django-Rest-Framework,既能夠簡化IT設施層、又能夠複用成熟的設計:
四、最後仍是用Android Studio生成嚮導的TabLayout+ViewPager+PlaceFragment解決問題。
五、官網的Best Practice值得參考借鑑
六、採用OkHTTP作網絡訪問
七、採用Picasso作圖片加載
八、採用ExpandListView作According:
http://www.cnblogs.com/eyu8874521/archive/2012/08/16/2642605.html
http://my.oschina.net/amigos/blog/62614
九、非動態調整的信息儘可能在layout裏面指明
十、代碼Copy+粗枝大葉坑死人:出現問題應該先本身定位。
十一、Android的UI設計思路不是作好UI套數據,而是由數據結構出UI結構,UI和數據經過Adapter在結構上匹配生成。因此本質上android不是拖拽式開發的界面設計,而是官方所宣稱的MCV結構,相似於網頁的MVT架構。
十二、Android設計開發第一坑:佈局
1三、ListView子項的margin能夠用devider來設置
1四、調效果用手機,比模擬器快,調代碼用模擬器,跟蹤比真機方便。
1五、要努力拉長App代碼調試的時間週期,由於run一次的時間消耗不短。
1六、經過溝通提升先後端聯調效率的一個方法:對領域模型的設計要有專門的溝統統氣會議。
1七、AndroidSDK的本地安裝文檔,由於引用了遠程文件的緣由,可用性不是很好。
1八、關鍵設計必定要有相關方審查步驟,好比數據模型、好比移動後端的API。
1九、ListView裏面不該該出現佈局不一致的ListItem,這樣就會致使ItemView的複用出現問題
20、Button能夠用text顯示,tag傳值。
2一、給RxJava傳遞的final參數可能須要copy複製才能夠保證多線程讀寫問題,通常只有UI主線程和後臺線程的情境下不須要
2二、資源狀態列表,這個信息能夠從官方API指南找到:
java

 

  1. <selector xmlns:android="http://schemas.android.com/apk/res/android"; >   
  2. <item   
  3. android:color="hex_color"   
  4. android:state_pressed=["true" | "false"]   
  5. android:state_focused=["true" | "false"]   
  6. android:state_selected=["true" | "false"]   
  7. android:state_active=["true" | "false"]   
  8. android:state_checkable=["true" | "false"]   
  9. android:state_checked=["true" | "false"]   
  10. android:state_enabled=["true" | "false"]   
  11. android:state_window_focused=["true" | "false"] />   
  12. </selector>   



2三、Fragment的onCreate用來初始化數據,onCreateView用來初始化界面,前者通常只執行一次,後者隨界面切換屢次執行,因此後者裏面最好不要作數據加載,若是某些數據加載必須在界面初始化之後作,要加上首次執行條件判斷。android

2四、TextView裏可用的HTML標籤,注意標籤不能String資源裏面直接寫,直接寫就被過濾掉了,可是寫在代碼的String變量裏面能夠,雖然不太符合Android開發規範,可是避免了字符轉換,算是比較nice的解決方式。編程

 

  1. <href="...">  
  2. <b>  
  3. <big>  
  4. <blockquote>  
  5. <br>  
  6. <cite>  
  7. <dfn>  
  8. <div align="...">  
  9. <em>  
  10. <font size="..." color="..." face="...">  
  11. <h1>  
  12. <h2>  
  13. <h3>  
  14. <h4>  
  15. <h5>  
  16. <h6>  
  17. <i>  
  18. <img src="...">  
  19. <p>  
  20. <small>  
  21. <strike>  
  22. <strong>  
  23. <sub>  
  24. <sup>  
  25. <tt>  
  26. <u>  

2五、onCreate、onStart裏面對View作操做,View均可能尚未渲染成功,因此好比getHeight獲得的多是0,要確保view渲染之後代碼執行,能夠用view.post(runnable)後端

2六、ListView顯示不全,緣由是AppbarLayout佔了兩行空間。把TabLayout移出AppbarLayout網絡

2七、爲何要用接口:沒有基類的實現負擔,實現基類的不一樣子類對象實例的靈活可換。叢某種角度講:接口是靜態類型語言非鴨式辨型致使的累贅。數據結構

2八、Fragment的的資源新建初始化必須放在onCreate,放在onCreateView裏面會致使重複調用,從而資源泄露。多線程

2九、has leaked window com.android.internal.policy.impl.PhoneWindow$ that was originally added here  這個問題的交互誘因是Activity退出的時候,其界面上的dialog還在顯示,解決方法,覆蓋相關組件的onDestroy方法,把dialog釋放掉:架構

  1. @Override  
  2. public void onDestroy(){  
  3.     super.onDestroy();  
  4.     if ( mLoadingDialog!=null && mLoadingDialog.isShowing() ){  
  5.         mLoadingDialog.dismiss();  
  6.     }  
  7. }  

 

另外多說一句話,靜態對象不能引用組件資源,不然會致使被引用的組件資源沒法正常地被系統框架釋放掉。app

30、Android Studio 主題資源站:http://www.androidstudiothemes.com/

3一、通常來說帶反向應用的組件實例對象變量要在組件onDestroy的時候把這些變量都要釋放掉(=null),至於靜態變量最好不要有對組件的引用,也就是說有對組件有反向應用的對象變量最好不要作成靜態的。通常有隊組件有反向引用的對象主要是系統組件對象。

3二、AVD虛擬機啓動錯誤提示:

  1. emulator: WARNING: .//android/metrics/metrics_reporter_ga.c:138: curl_easy_perform() failed with code 7 (Error)  
  2. emulator: WARNING: .//android/metrics/metrics_reporter_ga.c:145: Got HTTP response code 0  


修改方法:Open the Android Studio->Preferences, go to Appearance & Behavior->System Settings->Usage Statistics, and uncheck "Send usage statistics to Google". Now the matrics_reporter will be disabled during emulator starting. 

推薦出不出錯誤,都作此修改,否則虛擬機啓動之後,Log老報這方面的鏈接錯誤。

3三、Fragment的getView()在onCreateView這個函數執行以前是空的,因此onCreateView函數裏面只能用本身inflate的view來作findViewbyID操做。

3四、RxAndroid致使的空指針問題:通常網絡數據爬取完,要操做Activity或者Fragment的資源來完成數據顯示更新,可是因爲網絡訪問和用戶切換界面操做的時間差,當你作數據顯示更新的時候,也許Activtiy或者fragment的資源已經不復存在由此致使NullPointer Error問題,能夠經過操做這些資源以前作個空指針判斷來解決這個問題。

3五、Fragment的Context Activity空指針問題,因爲API不一樣版本之間的不一致性,在Fragment的生存生命週期內,可能存在其Context Activity其實不存在或者被銷燬,在這種狀況下,若是要使用這個Actiity對象,也要作空指針判斷。

3六、對於Fragment的使用,《Android權威編程指南》曾經推薦儘可能使用標準庫裏的Fragment,而且放棄使用FragmentActivity,轉而使用標準庫中的Activity類,放棄使用support.v4.app.fragment,轉而使用app.fragment,放棄使用getSupportFragmentManager().轉而使用getFragmentManager()方法

3七、對於全部View的取其界面屬性值的處理,好比getHeight,getWidth,都要用post異步化,由於作成同步,很容易是界面未正確渲染時的結果。

相關文章
相關標籤/搜索