码迷,mamicode.com
首页 > 移动开发 > 详细

Android ANR小知识

时间:2015-11-23 11:46:35      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

转载请注明出处:王亟亟的大牛之路

崩溃和未响应是我们开发过程中经常会碰到,而且是很不希望碰到的问题,像这样:
技术分享(崩溃)

或者是这样?

技术分享

通常,我们主线程被阻塞的时候会出现未响应的情况,而某些异常出现却为被处理会出现系统的崩溃。

这里我们来说下ANR:

全名:Application Not Responding

一般何时会出现?

—主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件

—BroadcastReceiver 没有在10秒内完成返回

—主线程被IO操作(从4.0之后网络IO不允许在主线程中)阻塞。
—主线程中存在耗时的计算
—主线程中错误的操作,比如Thread.wait或者Thread.sleep等

系统通常会如何告知用户?

系统就会弹出一个ANR对话框,用户可以自行选择继续等待亦或者是停止当前程序。

如何避免?
—使用AsyncTask处理耗时IO操作。
使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。
—使用Handler处理工作线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程。
—Activity的onCreate和onResume回调中尽量避免耗时的代码
—BroadcastReceiver中onReceive代码也要尽量减少耗时,建议使用IntentService处理。

通常100到200毫秒就会让人察觉程序反应慢,为了更加提升响应,可以使用下面的几种方法

—如果程序正在后台处理用户的输入,建议使用让用户得知进度,比如使用ProgressBar控件。
—程序启动时可以选择加上欢迎界面,避免让用户察觉卡顿。
—使用Systrace和TraceView找出影响响应的问题。

Android ANR小知识

标签:

原文地址:http://blog.csdn.net/ddwhan0123/article/details/49992617

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!