什么是ANR 如何避免它
答:Application not Responding(程序无应答)
1)主线程中尽量少做操作
2)对繁琐的功能代码分段完成
3)潜在的耗时操作,例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者以数据库操作为例,通过异步请求的方式)来完成。
线程之间的通信方式(如何避免ANR)
(1). AsyncTask,其中doInBackground()和onPostExecute(Result)两个方法非常重要
doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如访问网络。该方法必须重写。
onPostExecute(Result) 这个方法运行于UI主线程,在doInBackground(Params…)方法执行后调用,该方法用于接收后台任务执行后返回的结果,刷新UI显示。
(2.)子线程 + handler
在子线程中执行完耗时操作需要刷新UI时,通过handler.sendMessage()发消息给主线程, 然后在主线程Handler中的handleMessage()方法中执行刷新UI操作
Android 中ANR异常的处理方法 :( 意思是: 应用程序没有响应 )
有两种情况会报ANR: 自己添加的
1.主线程在5秒内没有响应输入事件(事件处理/UI线程)
2.广播在10秒内没有完成返回( BroadcastReceiver)
下面是导致android中出现ANR异常的的情况:
1.在主线程内进行网络操作
2.在主线程内进行一些缓慢的磁盘操作(例如执行没有优化的SQL查询)
处理的逻辑是:
1.New一个新的线程,进行数据请求
2.获取数据后,调用handler.sendmessage方法
3.在handler的handle()方法中更新UI
// Android 如何指定浏览器访问 指定页面?
指定action 及 uri 就可以访问制定好的 浏览器了
1>简而言之: 一个程序至少有一个进程,一个进程至少有一个线程
2>线程的划分尺度小于进程,使的多线程程序的并发性高
3>进程在执行的过程中拥有独立的内存单元,而多个线程共享内存,从而提高了程序的运行效率
4>每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
5>多线程的意义在于一个应用程序中,有多个执行部分可以同时执行, 但是操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及分配资源,这就是进程和线程的重要区别
什么是ANR
ANR:Application Not Responding(应用程序无响应).当在某个应用主线程出现下列情况时,就会显示ANR对话框了:用户在进行了一种操作后5秒钟没有响应,BroadcastReceiver所进行的操作在10秒内没有完成,Service在20秒内没返回结果。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发ANR,比如访问网络,SD卡读写,Sqlite数据库增删改查等。
15. 如何避免ANR (线程间通讯的两种方式是什么)
1.AsyncTask,其中doInBackground()和onPostExecute(Result)两个方法非常重要
doInBackground()这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如访问网络。该方法必须重载。
onPostExecute(Result)这个方法运行于UI主线程,在doInBackground(Params…)方法执行后调用,该方法用于接收后台任务执行后返回的结果,刷新UI显示。
2. 子线程 + handler
在子线程中需要刷新UI时通过handler.sendMessage()发消息给主线程, 然后在主线程Handler中的handleMessage()方法中执行刷新UI操作