Android App罕見錯誤和優化方案


  本文來自http://blog.csdn.net/liuxian13183/ ,引用必須註明出處!
html


一、App若是被定義一個有參數構造函數,那麼須要再定義一個無參數的,若是不則會在某些狀況下初始化失敗java


二、include Java Exception stack in crash report 緣由:webview未被destroy和置空,快進快出容易致使Crashandroid


三、Json解析一直有反斜槓,如web

    "Detail": "[\"1476438611831,120.011798,30.294126,6.5461546E-4,2.9163063E-4,0.0034914017,-0.05355559,0.080890246,9.80617,-9.765625E-4,2.1362305E-4,1.8310547E-\"]"
而實際上須要這種

    "Detail": [
        [
            "1476440497243",
            "120.011839",
            "30.294298",
            "0.0013065673",
            "0.010251816",
            "-0.07671833",
            "-0.04659828",
            "0.06689003",
            "9.806312",
            "-5.79834E-4",
            "6.866455E-4",
            "-0.0027008057"
        ]
   ]
緣由:前者使用sdk自己提供的Json資源,後者使用gson提供的Json資源,若是要上傳jsonArray數據只能用Gson。
默認Json使用put方法設置數據,若是值有引號則自動加上反斜槓作轉譯



第1張是Json直接把value以Object的方式放入LinkedHashMap,第2張是Gson把Value分類(主要對Charater即String的接口)放入LinkedTreeMapjson

四、ScrollView經過addView加入Lv,結果焦點到達頁面底部,這是因爲Lv得到焦點引發的,因此把Lv的焦點去掉便可網絡

lv.setFocusable(false);框架

五、網絡請求返回數據一直是回車+空格的組合數據,報錯:java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=1函數

緣由:請求的接口沒有收到數據,是請求框架自身返回的數據,因此格式不正確;極可能是內網接口用外網鏈接致使佈局

六、優化

Error:Execution failed for task ':mergeAnzhiDebugResources'.
> Error: java.lang.RuntimeException: Crunching Cruncher img_bubble_default.9.png failed, see logs

主要緣由是.9圖片的長邊是放內容的,小點表明拉伸的,原來的位置恰好相反,改過來就好。


七、華爲手機讀取文件後截取,再得到圖片失敗。

分析:這個錯誤很奇怪,之前開發中常常不會遇到,而目前相對來講,各大廠商對權限的要求愈來愈嚴格,更甚者在安裝時即主動屏蔽若干權限,同時部分權限用時須要申請;說到這裏你可能就明白了,這裏主要是權限被剝奪的問題,要斷點到出錯的位置,提示賦予應用讀寫權限。


八、4.0以上版本,RadioGroup兩個子RadioButton均處於選中狀態

緣由在於:設計某一個radio爲true時,另一個沒有id,所以系統緣由致使兩個均被選中。

須要作的就是給radio設置id。


九、list不能addAll空數據,不然報空指針異常。系統層次的錯誤。


優化方案:

一、能用FrameLayout的,都換成這個(由於Android會對此layout進行merge操做),同時能不用layout的也儘可能不用


二、純色圖片,能用xml寫的,換用xml寫,圖片命令均以img_x_x.png


三、中文都寫到string文件裏,有相同中文的,去掉其中一個,命名儘可能短且通用,儘可能用Html的from格式和String的format格式來處理字符串,兩個方法都可在CMYStringUtil方法裏找到


四、上述二者不用的,大家暫時能夠不處理,且命令儘可能通用,如能夠命名爲alipay_str_finish就不命令爲alipay_str_service_finish


五、文字輸入框,只能輸入哪些類型,作一個限制android_limit,另外,監聽一下回車鍵,看應該跳下一行就把回車鍵命名爲「下一行」,當前表單填完,命名爲「完成」,並觸發提交按鈕,數據進行驗證


六、Exception儘可能去掉,緣由是要找到錯誤處理掉,而非簡單的加try..catch


七、寫intent傳遞數據,對象用TransferData傳遞,基本數據類型用putExtra來傳遞,注意key都要用IConstants裏的intent_key


八、方法都命名爲有意義的命名,具體參考「新人必讀」裏的規則,以及變量名,全局、局部、靜態變量等,另外不用的字段都刪掉


九、findId儘可能都改爲getEelement,使用Ctrl+F來替換,尤爲適配器裏,儘可能用getInflateView和getEelement來代替


十、把公用的佈局或代碼提出來,儘可能多用include、viewStub、merge


十一、有網絡請求的,都要加上onRefresh方法,避免請求失敗,須要從新加載,當前頁面無方法


十二、優化語法邏輯,全面考慮出現問題的狀況,具有產品思惟


讀這篇文章同時也要注意一下系統升級的問題,裏面一樣埋有很多坑:Android高級第十一講之不一樣系統間的區別

另外內存是個亙古不變的老難量,參考:Android高級之十二講之如何下降應用內存消耗

相關文章
相關標籤/搜索