一.Android日志概述
Log.v();//Verbose
Log.d();//DebugLog.i();//InfoLog.w();//WarningLog.e();//ErrorAndroid程序在开发的时候,代码可以添加日志信息,例如上面的语句,来方便调试和定位问题。下面就是对于日志级别的理解。
使用每种类型的日志记录的适当情况是什么?我知道也许这只是一些语义,也许它并不重要,但对于AndroidStudio和Eclipse中的LogCat过滤,我很高兴知道我在适当的时候使用了正确的方法。
详细(verbose)
是最低级别的日志记录。
如果你想坚持记录,那么你就可以使用这个级别了。我从来不知道何时使用Verbose以及何时使用Debug。差别对我来说非常武断。一旦我指出Android1的源代码,我终于理解了“除了在开发过程中,不应该将Verbose编译成应用程序。”现在我很清楚,无论何时开发并想要添加可删除的日志来帮助你开发有用的是详细级别,这有助于您在投入生产之前删除所有这些日志。
调试(debug)
用于调试目的。
这是生产中应该达到的最低水平。这里的信息是在开发过程中提供帮助。大多数情况下,您将禁用此生产日志,以便发送较少的信息,并且只有在出现问题时才启用此日志。我喜欢登录调试应用程序从服务器发送/接收的所有信息(注意不要记录密码!!!)。这对于了解错误是在服务器还是应用程序中非常有帮助。我还会记录进入和退出重要功能的日志。
信息(info)
有关突出显示应用程序进度的信息性消息。
例如,当应用程序的初始化完成时。当用户在活动和片段之间移动时添加信息。记录每个API调用,但只记录URL,状态和响应时间等信息。
警告(warning)
当存在潜在的有害情况时。
这个日志在我的经历中是一个棘手的水平。你什么时候有潜在的有害情况?一般情况下或它是好的或它是一个错误。我个人不太喜欢这个级别。我使用它的例子通常是多次发生的事情。例如,用户的密码错误超过3次。这可能是因为他错误地输入了3次密码,也可能是因为我们的系统中没有接受某个字符存在问题。网络连接问题也是如此。
错误(error)
错误事件。错误后应用程序仍可继续运行。这可能是例如当我得到一个空指针,我不应该得到一个。解析服务器的响应时出错。从服务器收到错误。
WTF(多么可怕的失败)
致命是导致应用程序退出的严重错误事件。在Android中,致命的是实际上的错误级别,不同之处在于它还添加了fullstack。
二.程序出错案例:ANR问题
ANR产生原理
关于ANR的触发原因,Android官方开发者文档中“WhatTriggersANR?”有介绍,如下:
Generally,thesystemdisplaysanANRifanapplicationcannotrespondtouserinput.Forexample,ifanapplicationblocksonsomeI/Ooperation(frequentlyanetworkaccess)ontheUIthreadsothesystemcantprocessin