问题:StackOverflowError

在HTC或者摩托罗拉的手机上测试出现 StackOverflowError 的错误。

06-12 10:28:31.750: E/AndroidRuntime(13995): FATAL EXCEPTION: main

06-12 10:28:31.750: E/AndroidRuntime(13995): java.lang.StackOverflowError

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.text.Layout.getLineForOffset(Layout.java:1059)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.text.Layout$Ellipsizer.getChars(Layout.java:2270)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.text.TextUtils.getChars(TextUtils.java:70)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.graphics.Canvas.drawText(Canvas.java:1328)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.text.Layout.draw(Layout.java:651)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.widget.TextView.onDraw(TextView.java:4326)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.View.draw(View.java:7094)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1732)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.View.draw(View.java:6988)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1732)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.View.draw(View.java:6988)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1732)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1730)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1730)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.drawChild(ViewGroup.java:1730)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1459)

06-12 10:28:31.750: E/AndroidRuntime(13995):          at android.view.View.draw(View.java:6988)

从前面几行分析,跟文本控件有关。最后问题定位结果就是因为listView中textVIew嵌套太深所至。

我的listVIew布局层是这样的:

Listview--->RelativeLayout--->RelativeLayout--->RelativeLayout--->LinearLayout--->TextView

改为:

Listview--->RelativeLayout--->RelativeLayout--->RelativeLayout --->TextView

总结:尽可能的使用简单的布局和视图

      如果一个窗口包含很多的视图,那么启动时间长、测量时间长、绘制时间长、布局时间长;如果视图树深度太深,会导致StackOverflowException异常,和用户界面反映会很慢很慢,如果在ListView 或者 GridView中使用则会更加严重。因此建议各位使用布局的时候,一定要选择合理的布局,复杂的堆砌即使解决了我们对复杂布局的处理,却很有可能降低我们程序的阅读效率,甚至抛出意想不到的异常。

    解决的方法:

1.使用TextView的复合drawables,减少层次(该方法我们开发过程中屡试不爽!!!)

2.使用ViewStub延迟展开视图

3.使用<merge>合并视图

4.使用RelativeLayout减少层次

5.自定义布局

详细见:http://www.cnblogs.com/felix-hua/archive/2012/01/06/2314963.html

以上见解纯属个人理解,欢迎大家多多指教,共同学习,共同进步!

Android开发出现 StackOverflowError的更多相关文章

  1. Android开发中StackOverflowError

    Android开发中StackOverflowError错误实例分析 一.概述 我在一个复杂的layout嵌套较多的android界面,碰到了java.lang.StackOverflowError这 ...

  2. [转]Android开发最佳实践

    ——欢迎转载,请注明出处 http://blog.csdn.net/asce1885 ,未经本人同意请勿用于商业用途,谢谢—— 原文链接:https://github.com/futurice/and ...

  3. Android开发最佳实践

    Android开发最佳实践 摘要 ●使用 Gradle 和它推荐的工程结构 ●把密码和敏感数据放在gradle.properties ●不要自己写 HTTP 客户端,使用Volley或OkHttp库 ...

  4. Android 开发最佳实践

    原文地址:https://github.com/futurice/android-best-practices/blob/master/translations/Chinese/README.cn.m ...

  5. Android 开发必备的知识点——JVM基础【转】

    image 1.JVM与操作系统的关系 Java Virtual Machine JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机.它能识别 .class ...

  6. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  7. Android 开发一定要看的15个实战项目

    前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...

  8. Android开发学习之路-关于Exception

    Exception在Java中是表示异常的一个类.它是Throwable的子类. 而Exception的子类RuntimeException是一个特殊的异常类,在代码中不需要对此类进行throw,而是 ...

  9. Android开发学习之路-Android中使用RxJava

    RxJava的核心内容很简单,就是进行异步操作.类似于Handler和AsyncTask的功能,但是在代码结构上不同. RxJava使用了观察者模式和建造者模式中的链式调用(类似于C#的LINQ). ...

随机推荐

  1. 如何使用jmeter连接数据库并提取数据库中的值作为参数,与响应信息中提取的值进行比较

    思路: 连接数据库 获取数据库返回的数据 获取接口返回的数据 两者返回数据进行对比验证 连接数据库 1.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要 ...

  2. Python:通过一个小案例深入理解IO多路复用

    通过一个小案例深入理解IO多路复用 假如我们现在有这样一个普通的需求,写一个简单的爬虫来爬取校花网的主页 import requests import time start = time.time() ...

  3. IT兄弟连 JavaWeb教程 使用Servlet实现在页面中显示随机数

    在com.xdl.servlet包下定义RandomServlet类并HttpServlet类,在该类中生成随机数并发送给客户端.RandomServlet类详细代码如下: package com.x ...

  4. 笔记-JavaWeb学习之旅18

    AJAX:ASynchronous JavaScript And XML 异步的JavaScript 和XML 异步和同步:客户端和服务器端相互通信的基础上 同步:客户端操作后必须等待服务器端的响应, ...

  5. Angular.js思维导图

    AngularJS的四大特性的思维导图如下: 将AngularJS应用于工作:其思维导图如下: AngularJS服务思维导图:

  6. Jar命令用法

    JAR文件 JAR文件 全称:Java Archive File , 意思是Java档案文件.通常JAR文件是一种压缩文件,与常见的ZIP压缩文件兼容,通常被称为JAR包. JAR文件和ZIP文件的区 ...

  7. POJ3694 Network 边双缩点+LCA+并查集

    辣鸡错误:把dfs和ldfs搞混...QAQ 题意:给定一个无向图,然后查询q次,求每次查询就在图上增加一条边,求剩余割边的个数. 先把边双缩点,然后预处理出LCA的倍增数组: 然后加边时,从u往上跳 ...

  8. 定时任务crontab 详解

    cron 是一个可以用来根据时间.日期.月份.星期的组合来调度对重复任务的执行的守护进程. cron 假定系统持续运行.如果当某任务被调度时系统不在运行,该任务就不会被执行. 要使用 cron 服务, ...

  9. 物体检测丨从R-CNN到Mask R-CNN

    这篇blog是我刚入目标检测方向,导师发给我的文献导读,深入浅出总结了object detection two-stage流派Faster R-CNN的发展史,读起来非常有趣.我一直想翻译这篇博客,在 ...

  10. Redis特性之持久化机制

    持久化机制 Redis是一个支持持久化的内存数据库,也就是说redis需要经常将内存中的数据同步到硬盘来保证持久化. Redis支持两种持久化方式: 1.snapshotting(快照)也是默认方式 ...