Android-程序(***)无响应,要将它关闭吗

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里的耗时操作重新检查编程。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值