安卓 java.lang.StackOverflowError 错误检查,特别是部分低端机型
2016-02-27 17:47
399 查看
java.lang.StackOverflowError这个问题开发的人都知道是调用堆栈过深导致,在java中常出现在递归调用出不来的情况。在安卓里经常是UI view嵌套层级过深导致。
重点记录下嵌套层级过深的查错流程:
当前页面找到最复杂的块,例如listView,table,viewPager等。细化到最底层的xml上,例如一个item,一个复杂的layout。(特别小心,一个listview块还有header之类的,不仅仅是item,一定要搞最深的,或者干脆删掉一块再往下走)
xml删层级,先降低到xml上只剩2层,看看是否崩溃,在逐步增加。找出当前xml最大支持的层级数。(如果最大只支持2层,那恭喜你,你父级太复杂,接着往上找吧)
根据最大层级,修改代码来减,这个xml不行,就看父级能不能减,一直往上跟踪。(特别注意,有些自定义控件或者include的里面可能多得很呢)
找到哪里要减不要急着改代码,先把层级减下去确保方案可行,再改代码,把该调研的调研完,千万别代码改了又出诡异的问题。
查层级的时候,并不是一个控件就一级的。
textView:本身就有2层,如果调用setMovementMethod(给textView加点击或者滑动效果),一旦加了这个方法,那么textView会变成4层。原理上其实就是在textView中用了SpannableStringBuilder,就会变成4层。如果textView有android:ellipsize="end"属性,则会再增加1层。
RelativeLayout:如果里面没东西的话,本身是不算层级的。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法