android studio lint基本解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 可访问性(accessibility)1、Image without contentDescription图像没有内容描述这个是需要对图片进行一个描述,不然会有警告,一般情况下进行统一的标识加入android:c ontentDescriptio...

可访问性(accessibility)

1、Image without contentDescription图像没有内容描述

这个是需要对图片进行一个描述,不然会有警告,一般情况下进行统一的标识加入

android:c ontentDescription="@string/abc

正确性(correctness)

2、Attribute unused on older versions 旧版本中未使用的属性

3、Class is not registered in the manifest 类没有在清单中注册

没有注册的activity

4、Duplicate ids across layouts combined with include tags布局中重复的ids与包含标签相结合

引用的布局和父布局包含相同的id

5、Implied locale in date format 使用日期格式的默示语言环境

http://blog.csdn.net/revival_liang/article/details/51812723

时间声明问题

SimpleDateFormat format = new SimpleDateFormat("MM月dd日HH时mm分ss秒");//有报警问题 SimpleDateFormat format = new SimpleDateFormat("MM月dd日HH时mm分ss秒", Locale.getDefault());

6、Incorrect order of elements in manifest 清单中元素的顺序不正确

有些权限需要写道application之前,示例极光的一个权限

<uses-permission android:name="packagename.permission.JPUSH_MESSAGE" />

7、Layout Inflation without a Parent 父布局没有膨胀

示例 使用null
View view = inflater.inflate(R.layout.progressbar, null);

正确的使用 第三个参数设置为了true,表示将第一个参数所指定的布局添加到第二个参数的View中

LinearLayout ll = (LinearLayout) findViewById(R.id.ll); LayoutInflater inflater = LayoutInflater.from(this); inflater.inflate(R.layout.linearlayout, ll,true);

8、Missing commit() calls 失踪的commit()调用

一般报错

After creating a FragmentTransaction, you typically need to commit it as well

fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.xxxx, new xxxxFragment().newInstance(xxxx),"xxxx"); fragmentTransaction.commit(); 改为(暂未测试效果) fragmentManager.beginTransaction().replace(R.id.xxxx, new xxxxFragment().newInstance(xxxx),"xxxx").commit();

9、Missing commit() on SharedPreference editor

`
SharedPreferences.Editor edit = sp.edit();

edit.putString("isFirstLogin", "0");

edit.commit();

改为 apply()

`
这两个方法的区别在于:

  1. apply没有返回值而commit返回boolean表明修改是否提交成功
  2. apply是将修改数据原子提交到内存, 而后异步真正提交到硬件磁盘, 而commit是同步的提交到硬件磁盘,因此,在多个并发的提交commit的时候,他们会等待正在处理的commit保存到磁盘后在操作,从而降低了效率。而apply只是原子的提交到内容,后面有调用apply的函数的将会直接覆盖前面的内存数据,这样从一定程度上提高了很多效率。
  3. apply方法不会提示任何失败的提示。
    由于在一个进程中,sharedPreference是单实例,一般不会出现并发冲突,如果对提交的结果不关心的话,建议使用apply,当然需要确保提交成功且有后续操作的话,还是需要用commit的。

10、Nested scrolling widgets 嵌套滚动窗口小部件

scrollview中嵌套了listview

11、Obsolete Gradle Dependency 过时Gradle依赖

提示android 升级高版本

12、RecyclerView Problems recycleerview的问题

在onBindviewholder方法中不能使用position 应该使用holer.getAdapterPosition()来获取position 有时候在做item换位置时直接使用postiion会发生位置错误 无法获取到变换后的位置

13、ScrollView size validation scrollview大小的验证

ScrollView里的LinearLayout的高度应该使用wrap_content

14、Reference to an id that is not in the current layout 引用不在当前布局内的id

15、Target SDK attribute is not targeting latest version 目标SDK属性不是针对最新版本的

15、Unreachable state in a <selector>

In a selector, only the last child in the state list should omit a state qualifier. If not, all subsequent items in the list will be ignored since the given item will match all

在选择器中,只有状态列表中的最后一个子应该省略一个状态限定符。如果没有,则列表中的所有后续项都将被忽略,因为给定的项将匹配所有项

16、Using deprecated resources 过时的方法

17、Using inlined constants on older versions quanxu

Internationalization 国际化

18、Hardcoded text 硬编码

https://toutiao.io/posts/572671/app_preview

19、TextView Internationalization

java 代码中使用的汉字应使用常量来代替(个人建议)

20、 Bidirectional Text 双向设置

如 :
android:paddingLeft="15dp"
需要设置两侧对应
android:paddingLeft="15dp" android:paddingRight="15dp"

Performance 性能

21、FrameLayout can be replaced with <merge> tag FrameLayout可以替换为<merge>标签 MergeRootFrame

如果FrameLayout是根布局,并且不提供背景或填充等,它通常可以替换为稍微更有效的<merge>标签。请注意,这取决于上下文,因此请确保在继续之前了解<merge>标记的工作原理。

22、Handler reference leaks handle引起程序泄露参考

因为同一个线程下的handler共享一个looper对象,消息中保留了对handler的引用,由于Java在生成内部类的时候,原本没有构造器的内部类会被生成一个带外部类参数的构造器,这个内部类就会持有外部类的隐式引用。Handler其实隐式的持有了Activity的引用,只要有消息在队列中,那么handler便无法被回收,如果handler不是static那么使用Handler的Service和Activity就也无法被回收。这就可能导致内存泄露

http://blog.csdn.net/liangchengfeng/article/details/51999882

23、HashMap can be replaced with SparseArray HashMap可以用SparseArray替换

`
HashMap<Integer, HashMap<String, String>> rightPopCommonList = new HashMap<Integer, HashMap<String, String>>();
改为
HashMap<Integer, HashMap<String, String>> rightPopCommonList = new new HashMap<>();

`

24、Inefficient layout weight 低效的权重布局

在 设置权重属性的时候相应的宽高属性应设为0dp

25、Layout hierarchy is too deep 布局层次结构太深

嵌套过多的布局不利于性能。考虑使用更平的布局(比如相对布局或GridLayout)。默认的最大深度为10,但可以使用环境变量androidlintmaxdepth配置

26、Memory allocations within drawing code 绘制代码内的内存分配

Avoid object allocations during draw/layout operations (preallocate and reuse instead)
You should avoid allocating objects during a drawing or layout operation. These are called frequently, so a smooth UI can be interrupted by garbage collection pauses caused by the object allocations. The way this is generally handled is to allocate the needed objects up front and to reuse them for each drawing operation. Some methods allocate memory on your behalf (such as Bitmap.create), and these should be handled in the same way.

27、Missing baselineAligned attribute 消失的baselineAligned属性

baselineAligned属性默认为true 这是基准线设置,设置为fale时它的子控件不对齐
当linearlayout为水平时设置为fale 获取更好的性能
http://blog.csdn.net/bdmh/article/details/48495583

28、Nested layout weights 嵌套布局权重

避免权重套权重,当一个非零权重的线性布局被嵌套在另一个带有非零权重的线性布局中,那么度量的数量就会呈指数增长。

29、Node can be replaced by a TextView with compound drawables 节点可以用一个带有复合绘图的TextView来替换

让只有图片和文字的一个小布局合并为一个textview 这个视情况。

30、Obsolete layout params 布局中无用的参数

31、Overdraw: Painting regions more than once 过度绘制

一般布局根背景不需要在设置bg了 子布局的背景挡住的父布局造成了过度绘制

32、Static Field Leaks 静态变量泄露

主要是上下文对象不要设置为static

33、Unused resources 无用的资源

34、Useless leaf layout 无用的布局

35、Useless parent layout无用的父布局

36、View Holder Candidates adapter没有重用子布局

相关文章
|
2月前
|
IDE Android开发 iOS开发
深入解析Android与iOS的系统架构及开发环境差异
本文旨在探讨Android和iOS两大主流移动操作系统在系统架构、开发环境和用户体验方面的显著差异。通过对比分析,我们将揭示这两种系统在设计理念、技术实现以及市场策略上的不同路径,帮助开发者更好地理解其特点,从而做出更合适的开发决策。
155 2
|
1月前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
22 3
|
15天前
|
安全 5G Android开发
安卓与iOS的较量:技术深度解析
【10月更文挑战第24天】 在移动操作系统领域,安卓和iOS无疑是两大巨头。本文将深入探讨这两个系统的技术特点、优势和不足,以及它们在未来可能的发展方向。我们将通过对比分析,帮助读者更好地理解这两个系统的本质和内涵,从而引发对移动操作系统未来发展的深思。
30 0
|
1月前
|
Java Unix Linux
Android Studio中Terminal运行./gradlew clean build提示错误信息
遇到 `./gradlew clean build`命令执行出错时,首先应检查错误信息的具体内容,这通常会指向问题的根源。从权限、环境配置、依赖下载、版本兼容性到项目配置本身,逐一排查并应用相应的解决措施。记住,保持耐心,逐步解决问题,往往复杂问题都是由简单原因引起的。
209 2
|
1月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
51 4
|
1月前
|
测试技术 数据库 Android开发
深入解析Android架构组件——Jetpack的使用与实践
本文旨在探讨谷歌推出的Android架构组件——Jetpack,在现代Android开发中的应用。Jetpack作为一系列库和工具的集合,旨在帮助开发者更轻松地编写出健壮、可维护且性能优异的应用。通过详细解析各个组件如Lifecycle、ViewModel、LiveData等,我们将了解其原理和使用场景,并结合实例展示如何在实际项目中应用这些组件,提升开发效率和应用质量。
40 6
|
2月前
|
存储 开发框架 数据可视化
深入解析Android应用开发中的四大核心组件
本文将探讨Android开发中的四大核心组件——Activity、Service、BroadcastReceiver和ContentProvider。我们将深入了解每个组件的定义、作用、使用方法及它们之间的交互方式,以帮助开发者更好地理解和应用这些组件,提升Android应用开发的能力和效率。
166 5
|
2月前
|
缓存 Android开发 开发者
Android RecycleView 深度解析与面试题梳理
本文详细介绍了Android开发中高效且功能强大的`RecyclerView`,包括其架构概览、工作流程及滑动优化机制,并解析了常见的面试题。通过理解`RecyclerView`的核心组件及其优化技巧,帮助开发者提升应用性能并应对技术面试。
81 8
|
2月前
|
存储 缓存 Android开发
Android RecyclerView 缓存机制深度解析与面试题
本文首发于公众号“AntDream”,详细解析了 `RecyclerView` 的缓存机制,包括多级缓存的原理与流程,并提供了常见面试题及答案。通过本文,你将深入了解 `RecyclerView` 的高性能秘诀,提升列表和网格的开发技能。
66 8
|
1月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
205 0

推荐镜像

更多