ANR

当Android应用程序的UI线程被阻止太长时,会触发“应用程序无响应”(ANR)错误。如果应用程序位于前台,系统会向用户显示一个对话框,如图1所示.ANR对话框使用户有机会强制退出应用程序。

图1.向用户显示的ANR对话框

ANR是一个问题,因为应用程序的主线程负责更新UI,无法处理用户输入事件或绘图,从而导致用户感到沮丧。有关应用程序主线程的更多信息,请参阅进程和线程

当出现下列情况之一时,将为您的应用程序触发ANR:

  • 当您的活动位于前台时,您的应用BroadcastReceiver在5秒内未响应输入事件或(例如按键或屏幕触摸事件)。
  • 虽然您没有在前台进行活动,但您BroadcastReceiver还没有在相当长的时间内完成执行。

如果您的应用程序遇到ANR,您可以使用本文中的指导来诊断和解决问题。

 

ANR时一些常见的原因:

  1. 该应用程序在主线程上执行涉及I / O的慢速操作。
  2. 该应用程序正在主线程上进行长时间的计算。
  3. 主线程正在对另一个进程执行同步绑定器调用,而其他进程需要很长时间才能返回。
  4. 主线程被阻塞,等待在另一个线程上发生的长操作的同步块。
  5. 主线程与另一个线程处于死锁状态,无论是在您的进程中还是通过绑定器调用。主线程不仅仅是等待很长时间的操作才能完成,而是陷入僵局。有关更多信息,请参阅 Wikipedia上的死锁
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值