[Android] 分析ANR错误

       原创文章,转载请保留出处:http://blog.csdn.net/s278777851/article/details/7168559 


       ANR(application no respon) 的错误大家都不陌生了, 原因就是主线阻塞超过5秒没有响应, 或者是BroadcastReceiver 没有在十秒内完成返回。

        只要一些类似网络连接等耗时的操作开子线程去跑, 这样就可以避免这个错误了, 但是, 如果现在项目的确是出现了呢。下面教你怎么分析ANR错误。

       打开控制台(开始->运行-cmd), 输入adb pull /data/anr/traces.txt d:/traces.txt,  traces.txt  的文件就会复制到D盘上, 用记事本打开这个就像看一般的错误日志那样了. 找到自己熟悉的类名, 根据定位的行数就可以找到耗时的代码了.

       另外补充一下, 如果手机有root的权限,可以直接在DDMS的File Explorer看到traces文件


2013-2-18:  Android平台中(Android 2.3起),新增加了一个新的类,叫StrictMode(android.os.StrictMode)。这个类可以用来帮助开发者改进他们编写的应用,并且提供了各种的策略,这些策略能随时检查和报告开发者开发应用中存在的问题,比如可以监视那些本不应该在主线程中完成的工作或者其他的一些不规范和不好的代码

http://developer.android.com/reference/android/os/StrictMode.html


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ANRApplication Not Responding)是Android系统中常见的错误,指的是应用程序无响应。当应用程序在主线程上执行一些耗时操作而没有及时返回时,系统会自动弹出ANR对话框。 为了捕获ANR错误并及时处理,可以采取以下几种方法: 1. 使用StrictMode工具:StrictMode是一种开发工具,可在开发过程中检测和报告主线程方面的违规行为。可以通过在Application类的onCreate方法中开启StrictMode来检测主线程中的耗时操作,并在发现违规时进行相应的处理。 2. 使用Handler机制:在进行耗时操作时,可以使用Handler机制将该操作放在子线程中执行,然后通过Handler发送消息将结果返回给主线程。这样可以避免主线程被阻塞,提高应用的响应性能。 3. 使用AsyncTask类:AsyncTask是Android提供的一种异步任务处理机制,可以方便地在后台执行耗时操作,并将结果传递给主线程。通过重写AsyncTask的doInBackground方法来执行耗时操作,在处理结果时可以重写onPostExecute方法更新UI界面。 4. 使用线程池:使用线程池可以管理线程的创建和销毁,避免因频繁创建线程导致的性能问题。可以使用ThreadPoolExecutor类创建一个线程池,并将耗时操作放在线程池中执行。 无论采用哪种方法,重要的是避免在主线程上执行耗时操作,确保应用程序的响应性能。另外,还可以通过分析ANR错误产生的原因,优化代码和算法,减少耗时操作的时间,提高应用的性能和用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值