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找出影响响应的问题。
相关文章推荐
- android开发之bug
- android shape的使用
- 【Android学习笔记】Adapter - ArrayAdapter、SimpleAdapter
- Android启动模式介绍
- Android移植Launcher
- Android——如何查看Android系统源码
- android studio使用教程(六) project和module gradle脚本查看
- Android Service与IntentService及断点续传
- Android源码开发之Gallery图片放大倍数
- 【FastDev4Android框架开发】RecyclerView完全解析之下拉刷新与上拉加载SwipeRefreshLayout(三十一)
- ViewPager如下效果你研究过吗
- Android编程之客户端通过socket与服务器通信的方法
- 关于Android应用开发的一些安全注意事项
- 详解 Android Activity 生命周期
- 详解 Android Activity 生命周期
- android开发游记:scrollview上下弹动效果和viewpager左右弹动效果
- Volley缓存策略
- Android屏幕适配全攻略(最权威的官方适配指导)
- Android写文件到SDCard的简单代码
- Android之EventBus的使用