`

让用户不再遭遇ANR

阅读更多
  • 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();

1
1
分享到:
评论

相关推荐

    android7 关闭ANR对话框代码

    在Android系统中,ANR(Application Not Responding)是一个常见的问题,它表示应用程序无响应,通常出现在用户界面长时间无法交互时。在Android 7.0版本中,框架引入了一种新特性,即自动关闭ANR对话框,并允许...

    ANR代码流程分析.doc.tar.gz_ANR分析_android_anr代码_shp

    在Android系统中,ANR(Application Not Responding)是指应用程序无响应的错误,通常发生在用户界面线程上,导致用户无法进行任何操作。本文档"ANR代码流程分析.doc"将深入探讨ANR的产生原因及其相关的代码流程,这...

    android anr

    当一个应用程序在主线程上执行的操作超过了5秒钟而没有完成时,系统会认为该应用出现ANR问题,并弹出对话框让用户选择等待或者强制关闭应用。 ANR错误通常发生在以下几种情况: 1. **UI线程阻塞**:主线程负责处理...

    ANR软件.rarANR软件.rar

    ANR(Application Not Responding)在Android系统中是一个常见的错误提示,意味着某个应用程序无响应,导致用户界面无法正常交互。ANR软件可能是针对这一问题的一种解决方案或者分析工具,旨在帮助开发者诊断和解决...

    干货!ANR日志分析全面解析.docx

    ANR 日志分析全面解析 ANR(Application Not Responding)日志分析是 Android 开发者需要掌握的重要技巧之一。ANR 的产生机制可以分为四类:输入事件超时、广播类型超时、服务超时和 ContentProvider 类型超时。ANR...

    Android-ANR-WatchDog一个用于检测AndroidANR(应用不响应)的watchdog

    在Android应用开发中,ANR(Application Not Responding)是一个常见的问题,表示用户界面无响应,这通常是由于主线程被长时间阻塞导致的。`Android-ANR-WatchDog`是一个专门为解决这个问题而设计的开源工具,它能够...

    ANR(自动网络补充)技术

    - **增强了系统的灵活性**:ANR技术允许用户根据实际需求调整前端存储的容量,灵活应对不同应用场景下的网络状况。 - **优化了资源利用效率**:通过智能调节录像数据传输速率,ANR技术能够在保证数据同步的同时最大...

    华为LTE-ANR邻区自动优化.pdf

    华为LTE-ANR邻区自动优化 华为LTE-ANR邻区自动优化是基于自组织网络(SON)的 LTE 系统中的一个关键功能。ANR(AutomaticNeighbor Relation)功能可以自动发现漏配邻区,使 UE 顺利切换至原本系统中漏配邻区的目标...

    ANR的监测与定位Demo

    当一个Android应用的主线程在5秒内没有处理完事件(如UI更新、用户输入等)或者BroadcastReceiver在10秒内没有完成执行,系统就会检测到ANR并显示一个对话框,告知用户应用无响应。这种情况严重影响用户体验,因此...

    ANR各种日志.rar

    当用户界面无法在规定的时间内处理输入事件(如点击、滑动等)或者广播接收器在特定时间内未完成操作时,Android系统会检测到ANR并提示用户。在分析和解决ANR问题时,日志是非常关键的资源,因为它们提供了系统运行...

    通过Android trace文件分析死锁ANR实例过程

    在Android开发过程中,Application Not Responding(ANR)是一个开发者经常遇到的问题,它表示应用程序对用户操作或系统服务请求反应过慢,导致用户体验下降。ANR的产生原因多种多样,其中包括CPU负载过高、输入事件...

    anr.rar_ANR

    在Android开发中,ANR是一个常见错误,当应用程序在主线程上执行了阻塞操作,导致用户界面无法响应超过5秒时,系统会抛出这个错误。然而,描述中提到的是"安然企业网站源码",这似乎与Android的ANR问题无关,而是...

    防止ANR错误HandlerThread多线程解决耗时操作MyProject.zip

    在Android应用开发中,"ANR"(Application Not Responding)是开发者经常遇到的问题,它意味着用户界面在一段时间内没有响应用户的操作,通常超过5秒钟。这种情况下,系统会弹出对话框询问用户是否要强制关闭应用。...

    我的总结--Android之ANR的原理(Input, Service, Broadcast)

    ANR机制的设计旨在提高用户体验,确保应用程序在一定时间内能够响应用户的操作。通过对InputDispatcher处理ANR逻辑的详细分析,我们可以更好地理解ANR的触发条件及其处理流程。这对于开发者来说至关重要,因为合理的...

    /data/anr/traces.txt案例

    当用户在操作一个应用时,如果该应用在特定时间内(通常为5秒)未处理主线程的消息队列,系统就会检测到这个情况并弹出ANR对话框,提示用户程序未响应。这通常是由于应用的主线程被长时间阻塞导致的,可能的原因包括...

    ANR-WatchDog,安卓系统.zip

    在Android操作系统中,当一个应用执行主线程上的操作超过5秒钟而未给出响应时,系统会向用户显示ANR对话框,提示应用未响应,用户体验严重下降。ANR-WatchDog就像是一个守护进程,持续关注应用的运行状态,一旦发现...

    Android图片压缩解决方案,解决图片加载过程中ANR现象

    本解决方案旨在探讨如何有效压缩Android中的图片,避免ANR现象,提高用户体验。 首先,理解ANR全称为Application Not Responding,当Android系统检测到主线程被阻塞超过5秒钟时,就会向用户显示ANR对话框。图片加载...

    Android异常捕获demo(可以捕获ANR+UncaughtExceptionHandler)

    ANR是Android系统向用户报告应用无响应时显示的错误对话框。当应用主线程在5秒内无法完成输入事件(如点击按钮)或10秒内无法完成广播接收时,系统会触发ANR。这通常意味着应用可能陷入了死循环或者执行了耗时的...

    如何分析及避免Android ANR问题.pdf

    ANR问题通常发生在Android应用无法在规定时间内响应输入事件或广播消息时,导致系统弹出提示框让用户选择是否关闭应用。为了避免这类问题的发生,开发者需要深入理解ANR的成因原理、分析方法以及优化思路。 首先,...

    抓anr 工具

    抓anr 工具

Global site tag (gtag.js) - Google Analytics