26
2017
09

Android性能优化--Inspact Code代码检查

一.前言

在Android Studio中,Google还提供了很多代码分析工具,这些工具都集中在Android Studio的Analyze菜单中

  • 通过Inspect Code功能,可以让IDE分析整个工程,类似于Android的Lint分析

  • Inspect Code不仅提供了Lint的检测功能,还提供了一些其他的代码静态分析结果,同时给出了大致的修改意见,你也可以选择Code Cleanup功能来进行自动的代码修复,这两个功能可以在Analyze菜单中找到

  • 在Analyze菜单中,有几个Dependencies选项,通过这几个选项,可以快速分析项目的Dependencies依赖

  • Analyze Data flow
    这个功能用的不是很多,但是在某写情况下,对于熟悉旧的代码非常有帮助,它可以追踪数据流,了解该数据变量的来龙去脉,可以通过Dataflow from local variable的结果和Dataflow to local variable的结果显示出来

这里写图片描述

二.Inspact Code 结果展示

这里写图片描述

其中
Android > Lint > PerFomance
能索引到代码中有些无用的语句,已经无用的图片,应该修复掉.
Declaration redundancy 关于定义变量的警告
这里写图片描述

XML拼写警告
这里写图片描述

还有一些其他方法,引用下别人总结的

以下来自:http://www.jianshu.com/p/21c2551367b8

Android > Lint > Accessibility

1.Image without contentDescription

[Accessibility] Missing ‘contentDescription’ attribute on image
contentDescription 这个属性是为了给一些生理功能有缺陷的人使用应用程序提供方便的,比如有一个 ImageView 里面放置一张色彩丰富的图片,一些色弱色盲的人可能会分不清这张图片中画的是什么东西。如果用户安装了辅助浏览工具比如 TalkBack,TalkBack 就会大声朗读出用户目前正在浏览的内容。TextView控件TalkBack可以直接读出里面的内容,但是 ImageView TalkBack就只能去读 contentDescription的值,告诉用户这个图片到底是什么。

Android > Lint > Correctness

1.Layout Inflation without a Parent

Avoid passing ‘null’ as the view root (needed to resolve layout parameters on the inflated layout’s root element)
出现这条警告你肯定使用 LayoutInflater 类的方法加载布局了,具体缘由请查看这篇博文。

2.Missing commit() on SharedPreference editor

‘SharedPreferences.edit()’ without a corresponding ‘commit()’ or ‘apply()’ call
一般是因为你执行了 SharedPreference.Editor 的 put 方法然后忘了执行 apply 或 commit 方法。

3.Using inlined constants on older versions

这个是因为你调用的比你声明的 minSdkVersion 级别更高的 API.

Android > Lint > Internationalization > Bidirectional Text

1.Using left/right instead of start/end attributes

这条警告建议你将布局文件(多为相对布局)中声明的 ×××Left 或 ×××Right 替换成对应的 ×××Start 或 ×××End 以兼容从右至左的屏幕方向(这个取决于特定语境的阅读习惯)。

Android > Lint > Performance

1.Overdraw: Painting regions more than once

直译过来叫过度绘制,你应该明确当前的 subView 是否有覆盖上一级 View 的需求,如果有可忽略此条提示

2.Unused resources

这个不用我过多解释了吧,提示你项目里未使用的资源文件,请酌情删除。

Android > Lint > Security

待续…………

Android > Lint > Usability

Using setJavaScriptEnabled
Using ‘setJavaScriptEnabled’ can introduce XSS vulnerabilities into your application, review carefully.
使用’setJavaScriptEnabled’可以将XSS漏洞引入到应用程序中,请仔细检查确定有打开 JS 的必要。
嗯,一般用到 WebView 的地方都有必要打开 JS 支持。
待续…………

Android > Lint > Usability > Icons

1.Image defined in density-independent drawable folder

在密度无关的可绘制文件夹中定义的图像,我一般选择忽略,原因改天专门开篇文章解释。

Class structure

提示你类的结构可进一步优化的地方。

1.Field can be local

这个主要是有些变量可声明为局部变量。

2.’private’ method declared ‘final’

这个一般删掉 final 符就行。

Control flow issues

1.Unnecessary ‘return’ statement

不必要的 return 语句,这个一般是你在返回类型为 void 的方法的方法体内使用了 return 语句,到底有没有必要使用要视情况而定。比如你想在方法中加个条件判断,如果不符合条件就提前返回方法,这个时候返回 void 类型的方法里使用 return 语句是有必要的。

Declaration redundancy

1.Actual method parameter is the same constant

某个方法的某个参数在整个项目里被调用的地方总是个固定不变的值,所以这个形参是否有声明的必要呢?

2.Declaration access can be weaker

提示你类中的字段或方法声明的访问权限可优化。详细部分一般提示 Can be private,嗯。

3.Declaration can have final modifier

某类的某个字段可声明为 常量 即添加 final 修饰符。

4.Method returns the same value

此提示常出现于创建菜单以及菜单的选择点击回调方法处,使返回父类的方法调用即可。

General

1.Default File Template Usage

这个你自己肯定能看懂,我就不说了。

Imports

一般提示你一些未使用的导入语句,删掉就好。(右键可快速删掉)

Java language level migration aids

一些 JAVA 语言相关的优化建议。

Spelling

嗯。

上一篇:Dialog使用细节 下一篇:04 Activity窗口间的切换及参数的传递