我是靠谱客的博主 怡然鸡,最近开发中收集的这篇文章主要介绍ANR 定位和修正,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

可以通过查看/data/anr/traces.txt查看ANR信息。

根本原因是:主线程被卡了,导致应用在5秒时间未响应用户的输入事件。

很多种ANR错误出现的场景:

1) 主线程当中执行IO/网络操作,容易阻塞。

2) 主线程当中执行了耗时的计算。----自定义控件的时候onDraw方法里面经常这么做。

(同时聊一聊自定义控件的性能优化:在onDraw里面创建对象容易导致内存抖动---绘制动作会大量不断调用,产生大量垃圾对象导致GC很频繁就造成了内存抖动。)内存抖动就容易造成UI出现掉帧卡顿的问题

3) BroadCastReceiver没有在10秒内完成处理。

4) BroadCastReceiver的onReceived代码中也要尽量减少耗时的操作,建议使用IntentService处理。

5) Service执行了耗时的操作,因为service也是在主线程当中执行的,所以耗时操作应该在service里面开启子线程来做。

6) 使用AsyncTask处理耗时的IO等操作。

7) 使用Thread或者HandlerThread时,使用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)或者java.lang.Thread.setPriorityint priority设置优先级为后台优先级,这样可以让其他的多线程并发消耗CPU的时间会减少,有利于主线程的处理。

8) Activity的onCreate和onResume回调中尽量耗时的操作。

最后

以上就是怡然鸡为你收集整理的ANR 定位和修正的全部内容,希望文章能够帮你解决ANR 定位和修正所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部