ANR----以及如何定位是前端问题还是后台问题?
答:
ANR全称:Application Not Responding,也就是应用程序无响应
以及如何定位是前端问题还是后台问题
1.ANR错误定位——如果开发机器上出现ANR问题时,系统会生成一个traces.txt的文件放在/data/anr下,最新的ANR信息在最开始部分。
通过adb命令将其导出到本地,输入以下字符:$adb pull data/anr/traces.txt .
2.供选的优化ANR问题的方式:
1)为了执行一个长时间的耗时操作而创建一个工作线程最方便高效的方式是使用AsyncTask,只需要继承AsyncTask并实现doInBackground()方法来执行任务即可。为了把任务执行的进度呈现给用户,你可以执行publishProgress()方法,这个方法会触发onProgressUpdate()的回调方法。在onProgressUpdate()的回调方法中(它执行在UI线程),你可以执行通知用户进度的操作
2)如果你实现了Thread或者HandlerThread,请确保你的UI线程不会因为等待工作线程的某个任务而去执行Thread.wait()或者Thread.sleep()。UI线程不应该去等待工作线程完成某个任务,你的UI线程应该提供一个Handler给其他工作线程,这样工作线程能够通过这个Handler在任务结束的时候通知UI线程。例如:继承Thread类
)开发在日常的开发过程中使用Thread或者HandlerThread,可以尝试调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置较低的优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同。
4)Activity的onCreate和onResume回调中尽量避免耗时的代码,应该尽可能的做比较少的事情,其实,任何执行在UI线程中的方法都应该尽可能简短快速。类似网络或者DB操作等可能长时间执行的操作,或者是类似调整bitmap大小等需要长时间计算的操作,都应该执行在工作线程中。
5)BroadcastReceiver中onReceive代码也要尽量减少耗时。如果必须在onReceive方法中执行耗时操作,建议使用IntentService进行处理,IntentService集开启线程和自动关闭服务两种功能于一身,本身非常灵活。
辅助处理ANR问题的工具
1.Traceview - 系统性能分析工具,用于定位应用代码中的耗时操作
2.Systrace - Android4.1新增的应用性能数据采样和分析工具)
进入完成的功能页面摁F12或点击鼠标右键检查进入控制台看Console信息是否有红色报错
在Network查看状态码
100 (继续)
101 (转换协议)
101状态码是指服务器将按照其上的头信息变为一个不同的协议
200 (OK/正常)
200意思是一切正常。一般用于相应GET和POST请求
201 (已创建)
201表示服务器在请求的响应中建立了新文档;应在定位头信息中给出它的URL。
202 接受
202告诉客户端请求正在被执行,但还没有处理完。
203表示文档被正常的返回,但是由于正在使用的是文档副本所以某些响应头信息可能不正确。
204 (SC_NO_CONTENT)确保浏览器继续显示先前的文档。
205 (Reset Content/重置内容)
重置内容205 (SC_RESET_CONTENT)的意思是虽然没有新文档但浏览器要重置文档显示。这个状态码用于强迫浏览器清除表单域。这是 HTTP 1.1中新加入的。
206 局部内容
206是在服务器完成了一个包含Range头信息的局部请求时被发送的。
300 表示被请求的文档可以在多个地方找到,并将在返回的文档中列出来。
301状态是指所请求的文档在别的地方;文档新的URL会在定位响应头信息中给出。
302 状态码302是非常有用的因为浏览器自动连接在定为响应头信息中给出的新URL。
303这个状态码和 301、302 相似,只是如果最初的请求是 POST,那么新文档(在定位头信息中给出)药用 GET 找回。这个状态码是新加入 HTTP 1.1中的。
304 为修正
305表示所请求的文档要通过定位头信息中的代理服务器获得。
307临时重定向浏览器处理307状态的规则与302相同。
400指出客户端请求中的语法错误。
401 (Unauthorized/未授权)
403意思是除非拥有授权否则服务器拒绝提供所请求的资源。
404 (Not Found/未找到)
404状态每个网络程序员可能都遇到过,他告诉客户端所给的地址无法找到任何资源。
405指出请求方法(GET, POST, HEAD, PUT, DELETE, 等)对某些特定的资源不允许使用。
406表示请求资源的MIME类型与客户端中Accept头信息中指定的类型不一致。
407与401状态有些相似,只是这个状态用于代理服务器。
408是指服务端等待客户端发送请求的时间过长。
409状态常被用于试图上传版本不正确的文件。
410是在指导文档已被移走的情况下使用,而404则用于未知原因的无法访问。
411表示服务器不能处理请求除非客户端发送Content-Length头信息指出发送给服务器的数据的大小。
412状态指出请求头信息中的某些先决条件是错误的。
413告诉客户端现在所请求的文档比服务器现在想要处理的要大。
414状态用于在URI过长的情况时。
415意味着请求所带的附件的格式类型服务器不知道如何处理。
416表示客户端包含了一个服务器无法满足的Range头信息的请求。
500是常用的“服务器错误”状态。
501状态告诉客户端服务器不支持请求中要求的功能
502该状态指出接收服务器接收到远端服务器的错误响应。
503 (Service Unavailable/服务无法获得)
状态码503 (SC_SERVICE_UNAVAILABLE)表示服务器由于在维护或已经超载而无法响应。例如,如果某些线程或数据库连接池已经没有空闲则servlet会返回这个头信息。服务器可提供一个Retry-After头信息告诉客户端什么时候可以在试一次。
504
该状态也用于充当代理或网关的服务器;它指出接收服务器没有从远端服务器得到及时的响应。
505状态码是说服务器并不支持在请求中所标明 HTTP 版本。
根据状态码进行判断是前端或是后端
查看文档日志
但是日志容易在更新后会被覆盖
4前端错误 js css JavaScript 静态资源的错误
5Activity的onCreate和onResume回调中尽量避免耗时的代码,应该尽可能的做比较少的事情,其实,任何执行在UI线程中的方法都应该尽可能简短快速。类似网络或者DB操作等可能长时间执行的操作,或者是类似调整bitmap大小等需要长时间计算的操作,都应该执行在工作线程中。
6.前端错误主要在页面UI上如页面布局和页面展示信息、信息无法获取等错误
7.后端对接口进行测试可以使用Postman测接口