Android-程序(***)无响应,要将它关闭吗
2016-03-01 16:24
225 查看
Android-程序(***)无响应,要将它关闭吗
一个Android数据采集App,主要采集的是硬件串口、AD等数据,采集数据程序写在后台的service里边,前台的activity负责显示实时的数据,在实际环境中部署后,设备运行一段时间(通常是几天)会出现如题的bug,即前台界面就一直卡在哪里,后台service也卡死了。弹出的对话框(Toast?)会一直等你选择等待或者是结束程序。如图:
1. 参考地址http://www.jb51.net/article/51550.htm
前面说的这种情况叫做application not responding(ANR)错误:系统会在应用无法对用户输入响应时显示ANR。简单的说就是在UI线程中执行了费时操作导致的,应该将这些费时操作放到工作线程中去执行。两种情况会出现ANR:
a)5秒钟内应用对于用户操作没有响应
b)broadcastreciever未在10秒内执行完成
避免ANR的方法,为耗时操作创建AsyncTask线程,另外的方法就是设置自己创建的线程的优先级为background。
2. 参考地址http://blog.csdn.net/tonyjiang08/article/details/44151915,更加详细的介绍+strictmode
更为详细的说明了ANR的3中情况
a)keyDispatch(5 seconds) 主要情况
按键或者触摸事件在特定的时间内无响应
b)broadcast time out(10 seconds)
broadcastReciever在特定的时间内无法完成执行任务。
c)service time out(20 seconds)
service在特定时间无法处理完成
避免ANR的方法:UI线程只处理UI相关操作;耗时工作单独的线程;使用handler来处理UI Thread和其他Thread的交互。
strictmode:这个工具会检测发生在主线程上的磁盘或者网络操作并且会采取行动来警告开发者。
总结: 我的app,UI线程没有费时操作,界面也只是显示数据(通过handler)。那么问题出现在第二种或者第三种情况。在我的broadcastReciever中监听的boot_completed,实现开机自启。这个超时的可能性也比较小,最有可能的还是第三种情况,我在service中执行有较多的耗时操作,下一步应该是对这些service里的耗时操作重新检查编程。
一个Android数据采集App,主要采集的是硬件串口、AD等数据,采集数据程序写在后台的service里边,前台的activity负责显示实时的数据,在实际环境中部署后,设备运行一段时间(通常是几天)会出现如题的bug,即前台界面就一直卡在哪里,后台service也卡死了。弹出的对话框(Toast?)会一直等你选择等待或者是结束程序。如图:
1. 参考地址http://www.jb51.net/article/51550.htm
前面说的这种情况叫做application not responding(ANR)错误:系统会在应用无法对用户输入响应时显示ANR。简单的说就是在UI线程中执行了费时操作导致的,应该将这些费时操作放到工作线程中去执行。两种情况会出现ANR:
a)5秒钟内应用对于用户操作没有响应
b)broadcastreciever未在10秒内执行完成
避免ANR的方法,为耗时操作创建AsyncTask线程,另外的方法就是设置自己创建的线程的优先级为background。
2. 参考地址http://blog.csdn.net/tonyjiang08/article/details/44151915,更加详细的介绍+strictmode
更为详细的说明了ANR的3中情况
a)keyDispatch(5 seconds) 主要情况
按键或者触摸事件在特定的时间内无响应
b)broadcast time out(10 seconds)
broadcastReciever在特定的时间内无法完成执行任务。
c)service time out(20 seconds)
service在特定时间无法处理完成
避免ANR的方法:UI线程只处理UI相关操作;耗时工作单独的线程;使用handler来处理UI Thread和其他Thread的交互。
strictmode:这个工具会检测发生在主线程上的磁盘或者网络操作并且会采取行动来警告开发者。
总结: 我的app,UI线程没有费时操作,界面也只是显示数据(通过handler)。那么问题出现在第二种或者第三种情况。在我的broadcastReciever中监听的boot_completed,实现开机自启。这个超时的可能性也比较小,最有可能的还是第三种情况,我在service中执行有较多的耗时操作,下一步应该是对这些service里的耗时操作重新检查编程。
相关文章推荐
- android学习日记02-安装androidstudio完成helloword
- Android Activity启动模式(launchMode)
- Android Studio中Junit单元测试使用JSON对象异常的问题
- 第12章、布局Layouts之LinearLayout线性布局(从零开始学Android)
- Android Studio删除Project
- Android 打包apk(Ecplise)
- 5个Android常见内存泄露及处理方法
- Android studio 相关
- android Toast大全(五种情形)建立属于你自己的Toast
- Android基础类之BaseAdapter
- Android 内部存储相关的函数(getCacheDir,getDir, getFileStreamPath,getFilesDir,openFileInput, ...)
- Android adjustpan not working after the first time
- android – 多屏幕适配相关
- 2016这些Android技术会很火
- Android Shape 笔记
- Android开发优化之——对Bitmap的内存优化
- Android快速开发系列 10个常用工具类
- android Studio 百度地图打包时所需要的 百度KEY的申请和获得发布版 SHA1 的方法
- Android官方提供的支持不同屏幕大小的全部方法
- 我的Android学习之路