博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android App罕见错误和优化方案
阅读量:4661 次
发布时间:2019-06-09

本文共 2507 字,大约阅读时间需要 8 分钟。

  本文来自 ,引用必须注明出处!

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、优化语法逻辑,全面考虑出现问题的情况,具备产品思维

读这篇文章同时也要注意一下系统升级的问题,里面同样埋有不少坑:

另外内存是个亘古不变的老难量,参考:

转载于:https://www.cnblogs.com/fengju/p/6174381.html

你可能感兴趣的文章
网络流24题-飞行员配对方案问题
查看>>
引入css的四种方式
查看>>
iOS开发UI篇—transframe属性(形变)
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
使用java中replaceAll方法替换字符串中的反斜杠
查看>>
流量调整和限流技术 【转载】
查看>>
1 线性空间
查看>>
VS不显示最近打开的项目
查看>>
DP(动态规划)
查看>>
chkconfig
查看>>
2.抽取代码(BaseActivity)
查看>>
夏天过去了, 姥爷推荐几套来自smashingmagzine的超棒秋天主题壁纸
查看>>
反射的所有api
查看>>
css 定位及遮罩层小技巧
查看>>
[2017.02.23] Java8 函数式编程
查看>>
sprintf 和strcpy 的差别
查看>>
JS中window.event事件使用详解
查看>>
ES6深入学习记录(一)class方法相关
查看>>
C语言对mysql数据库的操作
查看>>
INNO SETUP 获得命令行参数
查看>>