ANR
当Android应用程序的UI线程被阻止太长时,会触发“应用程序无响应”(ANR)错误。如果应用程序位于前台,系统会向用户显示一个对话框,如图1所示.ANR对话框使用户有机会强制退出应用程序。
图1.向用户显示的ANR对话框
ANR是一个问题,因为应用程序的主线程负责更新UI,无法处理用户输入事件或绘图,从而导致用户感到沮丧。有关应用程序主线程的更多信息,请参阅进程和线程。
当出现下列情况之一时,将为您的应用程序触发ANR:
- 当您的活动位于前台时,您的应用
BroadcastReceiver
在5秒内未响应输入事件或(例如按键或屏幕触摸事件)。 - 虽然您没有在前台进行活动,但您
BroadcastReceiver
还没有在相当长的时间内完成执行。
如果您的应用程序遇到ANR,您可以使用本文中的指导来诊断和解决问题。
ANR时一些常见的原因:
- 该应用程序在主线程上执行涉及I / O的慢速操作。
- 该应用程序正在主线程上进行长时间的计算。
- 主线程正在对另一个进程执行同步绑定器调用,而其他进程需要很长时间才能返回。
- 主线程被阻塞,等待在另一个线程上发生的长操作的同步块。
- 主线程与另一个线程处于死锁状态,无论是在您的进程中还是通过绑定器调用。主线程不仅仅是等待很长时间的操作才能完成,而是陷入僵局。有关更多信息,请参阅 Wikipedia上的死锁。