標籤:android c class java a http
1. 一般性控制項需要設定onclick事件才會有點擊效果(selector)。
2. <item android:drawable=”@drawable/btn_ct_green” />要寫在selector的最後才會有點擊效果。
3. 製作.9格式圖片選最小圖,否則預設大小撐大控制項。4. 如果將一個對象的屬性設定為static,那麼就算對象執行個體被回收了,該屬性也存在記憶體,生命週期為app的生命週期。5. OOM:普通視圖和listvew等大資料量展示視圖的圖片控制分開來。6. OOM:listview等列表1秒真釋放,把大資料量載入後不用的圖片釋放。7. OOM:大圖片使用前壓縮。8. OOM:減少大圖。美工將全部規則圖最小化,製作.9格式,以最小程度佔用記憶體。9. OOM:背景圖、大圖謹慎使用,不規則大圖顯式釋放。10. 提前得知大小可使用,view.measure(-1, -1);但是view必須得有父view。11. listview列表呈現多種樣式,getViewTypeCount()方法返回全部樣式的總數,getItemViewType(int pos)返回的值必須小於getViewTypeCount(),否則報錯。
12. 公用類、介面、基類設計要職責清晰易理解,最大量減少別人使用時的難度。
13. OOM:webview 記憶體溢出(OOM),重啟一個新進程。並且設定:需要在onPause時停止Timer,解決由於Timer在,導致WebCoreThread一直在,WebviewCache.db被鎖定, 圖文詳情無法進入的問題webview.pauseTimers();當Activity返回onResume時WebView.enablePlatformNotifications();webview .resumeTimers();14. 觸控範圍要作為一個規範來控制到開發的每一步中,有src屬性的可以設定padding,沒有的為了不失真,套一個layout,最小寬度48dp(9mm)。15. 請求帶有時間戳記請注意,yy-MM-dd hh:mm:ss是12小時制格式。yy-MM-dd HH:mm:ss是24小時制格式。差別巨大。16. 基礎資料類型的封裝類型是有預裝緩衝的,JVM給Byte緩衝了-128~127的對象,Integer緩衝了-128~127。所以Integer i =k,Integer j =k,,k = 127,i == j為true,k=128則為false。17. 邏輯條件加緊要謹慎,放寬鬆更要謹慎;放寬後考慮是否更引發副作用問題,聚划算將id=()、itemId=(),i()都抓下拉起詳情,結果頻繁無辜拉起。收緊後考慮是否會引起擴充問題18.
最後一刻加上的代碼要嚴格的測試,很多時候就是最後‘以為’加上了‘無關緊要’的東西而導致崩潰掉。19. Math.abs()取到的不一定是正數,Integer.minValue就是負值。20. 多線程請使用並發容器放置變數,不輕易認為機會少不會衝突,並發量一大什麼都有可能。ThreadPool.shutdownNow()之後只是清除等待隊列,然後等待活動線程執行完。21. 強轉類型之前先先確定對象不為空白。22. android2.3以下版本listView.setDividerHeight()函數調用後,notifyDataSetChanged()便不能記住位置。可使用setSelection記住位置。23. finish和startActivity位置很重要. 由A跳轉向SingleTask的Activity B,A.finish的位置在startActivityB之前,退出B按home回到(home鍵退出或back鍵finishB)應用介面仍然是B,無論B是否是action.MAIN,overridePendingTransition需要在finish或者startActivity之後才有效。24. 地區事件攔截:比如只要ViewA擷取點擊事件而組織其父控制項和其他子控制項觸發事件,可重寫activity的dispatchTouchEvent()函數,調用ViewA.getHitRect(rect),初始化一個Rect,判斷event的getX和getY如果在rec之內,攔截ACTION_DOWN返回true,其餘ACTION調用ViewA. dispatchTouchEvent() 即可攔截事件。25. 一次有效觸摸,當ACTION_DOWN返回ture時,其他事件也不會在得到響應。當event在rect之外時,可以通過event.setAction(MotionEvent.ACTION_DOWN);activity.onTouchEvent(event);來重新觸發事件。26. WebView:緩衝與不緩衝,很關鍵。尤其在活動、計時、含session介面。27. WebView:當webview佔用大量記憶體時,可以將WebView全部啟動在另一個進程中。28. WebView:當多個重新導向幹擾或不能後退到上一頁時,不使用webview.goBack(),自己用棧Stack維護Url,其關鍵在於區分是否是重新導向,目前採用java調用js擷取、分析網頁內容判斷是否重新導向,如果不是再將url放入stack,反之不入棧。29. 無線電波狀態機器:應用運行在前台考慮避免延遲阻塞,運行在後台關注電量浪費。最佳化網路連接:預取資料,批量傳輸與串連(包含攜帶、順帶其他資料),減少串連次數(規避高頻心跳)。30. 當listview含有Header時,在onItemClick事件中請這樣擷取ItemObject:Object obj = parent.getAdapter().getItem(position); 先判空,再強轉為需要的對象。31. WebView: 注意對下載檔案的支援;shouldOverrideUrlLoading返回false,會自動載入該頁,返回true不會載入網頁,需要自己處理(之前返回true,調用WebView.load(url)結果造成重新導向網頁不能回退的問題,自己花了很大代價才解決,直接返回false會自動載入)。32. 使用一個函數,尤其別人寫的函數,不管怎麼誠懇的承諾參數不會為null,請盡量做非空判斷。除以一個變數之前,先確定其不為0.33. 如果程式自自動,或者後台耗流量,首先檢測manifest中靜態註冊的廣播,它會拉起程式。34. findbugs結合使用ADT(16以後)內建的lint檢測程式中的問題,lint可以檢測出未使用的圖片和更具android特性的問題。35. View onMeasure之後,width不一定有值,如果設定了LayoutParagrams那麼view.getLayoutParams().width將有設定值。36. Gallery特性改善:一次觸摸只切換一張圖片:複寫onFlying直接返回true;使觸摸更加靈敏:複寫onScroll 調用super.onScroll(e1, e2, distanceX * 1.5f, distanceY),使distanceX 變大就更加靈敏。37. Gallery視覺最佳化:setStaticTransformationsEnabled(true)之後,getChildStaticTransformation方法生效,預設方法會使圖片alpha值改變變而視覺不清,複寫可以利用Camera產生xyz和角度的改變,從而最佳化視覺體驗,比如打造3D畫廊。38. 可共用的對象屬性用static來保持一份節省資源,每個執行個體或者對象單獨享用的屬性切記不要static。39. 改變一個類的私人屬性:Field field = ViewGroup.class.getDeclaredField(“hsl”);field.setAccessible(true); field.set(listView, 0);40. Which client is best?
Apache HTTP client has fewer bugs on Eclair and Froyo. It is the best choice for these releases.
For Gingerbread and better, HttpURLConnection is the best choice. Its simple API and small size makes it great fit for Android. Transparent compression and response caching reduce network use, improve speed and save battery. New applications should use HttpURLConnection; it is where we will be spending our energy going forward.
http://www.vmatianyu.cn/poly-effective-client-1-issues-lessons.html