- ANR简介
Android有专门的Thread来负责处理如下的case:
1)在规定时间内没有响应用户输入(例如: 按键, 触摸屏幕)
2)在规定时间内没有执行完毕BroadcastReceiver
此时,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application NotResponding)对话框。
- 避免ANR
引起ANR的本质原因是: 主(main) Thread 过于繁忙,不能处理用户输入。避免ANR就需要把那些阻塞main thread的东西,移植到子线程去作(下面分别是引起ANR的代码和 优化后的代码)。
//cause ANR
public void onUpdate(int itemPos, final String itemName, UpdateInfo update) {
final String[] fields = new String[5];
fields[0] = notifyValue(update, X1);
fields[1] = notifyValue(update, X2);
fields[2] = notifyValue(update, X3);
fields[3] = notifyValue(update, X4);
fields[4] = notifyValue(update, X5);
Message msg = messageHandler.obtainMessage();
msg.what = MESSAGE_HANDLE_ID_UPDATEROW_DATA;
Bundle bundle = new Bundle();
bundle.putInt(MESSAGE_KEY_ID, Integer.parseInt(itemName, 10));
bundle.putString(X1, fields[0] );
bundle.putString(X2, fields[1]);
bundle.putString(X3, fields[2]);
bundle.putString(X4, fields[3]);
bundle.putString(X5, fields[4]);
msg.setData(bundle);
messageHandler.sendMessage(msg);
}
private Handler messageHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch(msg.what) {
case MESSAGE_HANDLE_ID_UPDATEROW_DATA:{
int id = msg.getData().getInt(MESSAGE_KEY_ID);
String fields[] = new String[5];
fields[0] = msg.getData().getString(X1);
fields[1] = msg.getData().getString(X2);
fields[2] = msg.getData().getString(X3);
fields[3] = msg.getData().getString(X4);
fields[4] = msg.getData().getString(X5);
updateRowInTable(id, fields);
break;
}
}
// high performance
public void onUpdate(int itemPos, final String itemName, UpdateInfo update) {
final String[] fields = new String[5];
fields[0] = notifyValue(update, X1);
fields[1] = notifyValue(update, X2);
fields[2] = notifyValue(update, X3);
fields[3] = notifyValue(update, X4);
fields[4] = notifyValue(update, X5);
final Runnable myUpdateResults = new Runnable() {
public void run() {
updateRowInTable(Integer.parseInt(itemName, 10), fields);
}
};
new Thread() {
public void run() {
messageHandler.post(myUpdateResults);
}
}.start();
private Handler messageHandler = new Handler();
分享到:
相关推荐
在Android系统中,ANR(Application Not Responding)是一个常见的问题,它表示应用程序无响应,通常出现在用户界面长时间无法交互时。在Android 7.0版本中,框架引入了一种新特性,即自动关闭ANR对话框,并允许...
在Android系统中,ANR(Application Not Responding)是指应用程序无响应的错误,通常发生在用户界面线程上,导致用户无法进行任何操作。本文档"ANR代码流程分析.doc"将深入探讨ANR的产生原因及其相关的代码流程,这...
当一个应用程序在主线程上执行的操作超过了5秒钟而没有完成时,系统会认为该应用出现ANR问题,并弹出对话框让用户选择等待或者强制关闭应用。 ANR错误通常发生在以下几种情况: 1. **UI线程阻塞**:主线程负责处理...
ANR(Application Not Responding)在Android系统中是一个常见的错误提示,意味着某个应用程序无响应,导致用户界面无法正常交互。ANR软件可能是针对这一问题的一种解决方案或者分析工具,旨在帮助开发者诊断和解决...
ANR 日志分析全面解析 ANR(Application Not Responding)日志分析是 Android 开发者需要掌握的重要技巧之一。ANR 的产生机制可以分为四类:输入事件超时、广播类型超时、服务超时和 ContentProvider 类型超时。ANR...
在Android应用开发中,ANR(Application Not Responding)是一个常见的问题,表示用户界面无响应,这通常是由于主线程被长时间阻塞导致的。`Android-ANR-WatchDog`是一个专门为解决这个问题而设计的开源工具,它能够...
- **增强了系统的灵活性**:ANR技术允许用户根据实际需求调整前端存储的容量,灵活应对不同应用场景下的网络状况。 - **优化了资源利用效率**:通过智能调节录像数据传输速率,ANR技术能够在保证数据同步的同时最大...
华为LTE-ANR邻区自动优化 华为LTE-ANR邻区自动优化是基于自组织网络(SON)的 LTE 系统中的一个关键功能。ANR(AutomaticNeighbor Relation)功能可以自动发现漏配邻区,使 UE 顺利切换至原本系统中漏配邻区的目标...
当一个Android应用的主线程在5秒内没有处理完事件(如UI更新、用户输入等)或者BroadcastReceiver在10秒内没有完成执行,系统就会检测到ANR并显示一个对话框,告知用户应用无响应。这种情况严重影响用户体验,因此...
当用户界面无法在规定的时间内处理输入事件(如点击、滑动等)或者广播接收器在特定时间内未完成操作时,Android系统会检测到ANR并提示用户。在分析和解决ANR问题时,日志是非常关键的资源,因为它们提供了系统运行...
在Android开发过程中,Application Not Responding(ANR)是一个开发者经常遇到的问题,它表示应用程序对用户操作或系统服务请求反应过慢,导致用户体验下降。ANR的产生原因多种多样,其中包括CPU负载过高、输入事件...
在Android开发中,ANR是一个常见错误,当应用程序在主线程上执行了阻塞操作,导致用户界面无法响应超过5秒时,系统会抛出这个错误。然而,描述中提到的是"安然企业网站源码",这似乎与Android的ANR问题无关,而是...
在Android应用开发中,"ANR"(Application Not Responding)是开发者经常遇到的问题,它意味着用户界面在一段时间内没有响应用户的操作,通常超过5秒钟。这种情况下,系统会弹出对话框询问用户是否要强制关闭应用。...
ANR机制的设计旨在提高用户体验,确保应用程序在一定时间内能够响应用户的操作。通过对InputDispatcher处理ANR逻辑的详细分析,我们可以更好地理解ANR的触发条件及其处理流程。这对于开发者来说至关重要,因为合理的...
当用户在操作一个应用时,如果该应用在特定时间内(通常为5秒)未处理主线程的消息队列,系统就会检测到这个情况并弹出ANR对话框,提示用户程序未响应。这通常是由于应用的主线程被长时间阻塞导致的,可能的原因包括...
在Android操作系统中,当一个应用执行主线程上的操作超过5秒钟而未给出响应时,系统会向用户显示ANR对话框,提示应用未响应,用户体验严重下降。ANR-WatchDog就像是一个守护进程,持续关注应用的运行状态,一旦发现...
本解决方案旨在探讨如何有效压缩Android中的图片,避免ANR现象,提高用户体验。 首先,理解ANR全称为Application Not Responding,当Android系统检测到主线程被阻塞超过5秒钟时,就会向用户显示ANR对话框。图片加载...
ANR是Android系统向用户报告应用无响应时显示的错误对话框。当应用主线程在5秒内无法完成输入事件(如点击按钮)或10秒内无法完成广播接收时,系统会触发ANR。这通常意味着应用可能陷入了死循环或者执行了耗时的...
ANR问题通常发生在Android应用无法在规定时间内响应输入事件或广播消息时,导致系统弹出提示框让用户选择是否关闭应用。为了避免这类问题的发生,开发者需要深入理解ANR的成因原理、分析方法以及优化思路。 首先,...
抓anr 工具