您的位置:首页 > 移动开发 > Android开发

Android ANR小知识

2015-11-23 11:22 309 查看

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

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


(崩溃)

或者是这样?



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

这里我们来说下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找出影响响应的问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: