处理应用的bug,这是每个程序员的基本功,实际项目中天天都有各式各样的bug,因此学会如何使用Logcat、Android Lint以及Android Studio内置的调试器就非常有必要啦。
异常与栈跟踪
写代码嘛,一个不注意就把程序写奔啦,不用担心,展开Android DDMS工具窗口。上下滑动LogCat窗口滚动条,就能看到整片红色的异常或错误信息。若看不到,可尝试选择LogCat的No Filters过滤器项。还有可以调整Log Level位Error,让系统只输出严重问题日志。
如图,随意写个空指针错误,LogCat就打印出了异常报告,告诉我们异常及其栈追踪,我们可以从异常语句直接跳转到源代码出错的对应行上,找出奔溃原因,加以修正。
如果发生应用崩溃的设备没有与计算机连接,日志信息也不会全部丢失。设备会将最近的日志保存到日志文件中(保存时间取决具体设备,一般十分钟之内有保证)。
记录栈跟踪日志
这个方式就是打印日志了,因为有的时候代码出现问题,不一定就会造成奔溃了,就可以在需要的地方,利用Log.d(...)方式来打印相应的信息,来检查方法是否正常调用,并且数据值是否跟预计一致了。大量的日志输出也容易导致LogCat窗口信息混乱难读,因此可以在查看的时候也可以过滤掉一些暂时不需要查看的日志,或者直接选择TAG,就只打印某一些log日志了。
设置断点
打断点也是程序员调试程序的常用方法,断点会在断点设置行的前一行代码出停止运行,然后我们可以逐行检查代码,看看接下来到底发生了什么。
有篇文章专门讲了Android Studio一些各种小技巧,当然包含了调试技巧,很棒的文章。
地址:http://jaeger.itscoder.com/android/2016/02/14/android-studio-tips.html
小结一句:打印Log日志的优点是,在同一日志记录中可以看到多处的栈跟踪信息;缺点是,必须学习如何添加日志记录方法,重新编译、运行应用并跟踪排查应用问题。相对而言,断点调试的方法更为方便,当然不同场景下,打印日志会更加清晰、方便寻找解决问题线索,比如说一个循环中。
Android特有的调试工具——Android Lint
Android Lint是Android应用代码的静态分析器,它是无需代码运行就能检查代码错误的的特殊程序,凭着对Android框架知识的掌握,Android Lint深入检查代码,找出编译器无法发现的问题。
选择Analyze -> Inspect Code...菜单项手动运行Lint
选择Whole project。然后Android Studio会立即运行Lint和其他一些静态分析器开始分析代码。
检查完毕,所有的潜在问题会按类别列出。
R类问题——有时候资源编译错误莫名其妙的出现,若遇到此类问题,可尝试如下操作
- 重新检查资源文件中的XML文件的有效性(某个布局的拼写有可能错误,拼写规范要遵守)
- 清晰项目(选择Build -> Clean Project,Android Studio会重新编译整个项目,消除错误,建议经常进行深度项目清理)
- 使用Gradle同步项目(若修改了build.gradle配置文件,就需要同步更新项目的编译设置。选择Tool -> Android -> Sync Project with Gradle Files菜单项,Android Studio会使用正确的项目设置重新编译项目)
- 运行Android Lint(仔细查看Lint警告信息,在项目中也许就能在这个工具的帮助下获得意想不到的发现噢)
如果仍然无法解决问题,那就访问 http://stackoverflow.com 寻求帮助吧 ~ O(∩_∩)O哈哈 ~
挑战练习:探索布局检查器
使用布局检查器以交互的方式检查布局文件,调试布局文件,研究它是如何在屏幕上渲染显示的。启动应用,在Android Monitor工具窗口点击最左边的布局检查器按钮,布局检查器激活后,点击布局检查器视图里的元素查看布局属性。
挑战练习:探索内存分配跟踪
在Android Monitor工具窗口,点击内存分配跟踪器按钮启动它。
然而,AS3.0我也没找到书上的这个内容,不过提供了个强大的 Android Profiler 分析器。
还有butterknife最新的在3.0.0也报错有问题,所以我用的butterknife版本为8.4.0。
终于可以勾选那个Enable advanced profiling了,那里描述是,需要API级别小于26,在允许Profiler跟踪网络负载,应用程序事件和对象计数等数据的时候,它可能对构建速度有轻微的性能影响。
单击Network——网络使用情况
横坐标代表是时间轴,那些折现是一些网络请求,按住鼠标左键从中选择一个范围,那用两条白色的竖杆包起来那块就是选择的范围,然后左下的列表就列出来了此范围的网络请求信息,什么状态啊,时间,请求类型啊,点击其中一条,右边显示的response更为具体了,图片的直接显示了图片,还有URL,不是图片的,把json数据全部都显示出来了,这个功能真的好方便呀,旁边还有一些选项,都可以看看用于分析。
单击MEMORY——内存使用情况
单击CPU——CPU占用情况
具体怎么分析使用,网上也有不少,可以参考博客:http://blog.csdn.net/niubitianping/article/details/72617864
更新于 2018/2/2