小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

Android App罕见错误和优化方案


  本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处!


1、App如果被定义一个有参数构造函数,那么需要再定义一个无参数的,如果不则会在某些情况下初始化失败


2、include Java Exception stack in crash report 原因:webview未被destroy和置空,快进快出容易导致Crash


3、Json解析一直有反斜杠,如

    "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的接口)放入LinkedTreeMap

4、ScrollView通过addView加入Lv,结果焦点到达页面底部,这是由于Lv获得焦点引起的,所以把Lv的焦点去掉即可

lv.setFocusable(false);

5、网络请求返回数据一直是回车+空格的组合数据,报错:java.lang.StringIndexOutOfBoundsException: length=0; regionStart=0; regionLength=1

原因:请求的接口没有收到数据,是请求框架自身返回的数据,所以格式不正确;很可能是内网接口用外网连接导致

6、

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

主要原因是.9图片的长边是放内容的,小点代表拉伸的,原来的位置刚好相反,改过来就好。


7、华为手机读取文件后截取,再获得图片失败。

分析:这个错误很奇怪,以前开发中经常不会遇到,而目前相对来说,各大厂商对权限的要求越来越严格,更甚者在安装时即主动屏蔽若干权限,同时部分权限用时需要申请;说到这里你可能就明白了,这里主要是权限被剥夺的问题,要断点到出错的位置,提示赋予应用读写权限。


8、4.0以上版本,RadioGroup两个子RadioButton均处于选中状态

原因在于:设计某一个radio为true时,另外一个没有id,因此系统原因导致两个均被选中。

需要做的就是给radio设置id。


9、list不能addAll空数据,否则报空指针异常。系统层次的错误。


优化方案:

1、能用FrameLayout的,都换成这个(因为Android会对此layout进行merge操作),同时能不用layout的也尽量不用


2、纯色图片,能用xml写的,换用xml写,图片命令均以img_x_x.png


3、中文都写到string文件里,有相同中文的,去掉其中一个,命名尽量短且通用,尽量用Html的from格式和String的format格式来处理字符串,两个方法均可在CMYStringUtil方法里找到


4、上述两者不用的,你们暂时可以不处理,且命令尽量通用,如可以命名为alipay_str_finish就不命令为alipay_str_service_finish


5、文字输入框,只能输入哪些类型,做一个限制android_limit,另外,监听一下回车键,看应该跳下一行就把回车键命名为“下一行”,当前表单填完,命名为“完成”,并触发提交按钮,数据进行验证


6、Exception尽量去掉,原因是要找到错误处理掉,而非简单的加try..catch


7、写intent传递数据,对象用TransferData传递,基本数据类型用putExtra来传递,注意key都要用IConstants里的intent_key


8、方法都命名为有意义的命名,具体参考“新人必读”里的规则,以及变量名,全局、局部、静态变量等,另外不用的字段都删掉


9、findId尽量都改成getEelement,使用Ctrl+F来替换,尤其适配器里,尽量用getInflateView和getEelement来代替


10、把公用的布局或代码提出来,尽量多用include、viewStub、merge


11、有网络请求的,都要加上onRefresh方法,避免请求失败,需要重新加载,当前页面无方法


12、优化语法逻辑,全面考虑出现问题的情况,具备产品思维


读这篇文章同时也要注意一下系统升级的问题,里面同样埋有不少坑:Android高级第十一讲之不同系统间的区别

另外内存是个亘古不变的老难量,参考:Android高级之十二讲之如何降低应用内存消耗

posted on 2016-10-08 10:02  王峰炬  阅读(289)  评论(0编辑  收藏  举报

导航