android studio lint基本解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 可访问性(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月前
|
SQL 人工智能 Dart
Android Studio的插件生态非常丰富
Android Studio的插件生态非常丰富
80 1
|
2月前
|
Ubuntu Linux Android开发
Android Studio支持多种操作系统
Android Studio支持多种操作系统
82 1
|
2月前
|
Java 开发工具 Android开发
Android与iOS开发环境搭建全解析####
本文深入探讨了Android与iOS两大移动操作系统的开发环境搭建流程,旨在为初学者及有一定基础的开发者提供详尽指南。我们将从开发工具的选择、环境配置到第一个简单应用的创建,一步步引导读者步入移动应用开发的殿堂。无论你是Android Studio的新手还是Xcode的探索者,本文都将为你扫清开发道路上的障碍,助你快速上手并享受跨平台移动开发的乐趣。 ####
|
30天前
|
存储 Linux API
深入探索Android系统架构:从内核到应用层的全面解析
本文旨在为读者提供一份详尽的Android系统架构分析,从底层的Linux内核到顶层的应用程序框架。我们将探讨Android系统的模块化设计、各层之间的交互机制以及它们如何共同协作以支持丰富多样的应用生态。通过本篇文章,开发者和爱好者可以更深入理解Android平台的工作原理,从而优化开发流程和提升应用性能。
|
30天前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
2月前
|
前端开发 数据处理 Android开发
Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍
本文深入探讨了Flutter前端开发中的调试技巧与工具使用方法,涵盖调试的重要性、基本技巧如打印日志与断点调试、常用调试工具如Android Studio/VS Code调试器和Flutter Inspector的介绍,以及具体操作步骤、常见问题解决、高级调试技巧、团队协作中的调试应用和未来发展趋势,旨在帮助开发者提高调试效率,提升应用质量。
55 8
|
2月前
|
数据可视化 开发工具 Android开发
Android Studio
Android Studio
116 1
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
安全 Java Linux
深入解析Android系统架构及其对开发者的意义####
【10月更文挑战第21天】 本文旨在为读者揭开Android操作系统架构的神秘面纱,探讨其如何塑造现代移动应用开发格局。通过剖析Linux内核、硬件抽象层、运行时环境及应用程序框架等关键组件,揭示Android平台的强大功能与灵活性。文章强调了理解Android架构对于开发者优化应用性能、提升用户体验的重要性,并展望了未来技术趋势下Android的发展方向。 ####
47 0
|
3月前
|
开发工具 Android开发 iOS开发
深入解析安卓与iOS开发环境的优劣
【10月更文挑战第4天】 本文将深入探讨安卓和iOS两大主流移动操作系统的开发环境,从技术架构、开发工具、用户体验等方面进行详细比较。通过分析各自的优势和不足,帮助开发者更好地理解这两个平台的异同,从而为项目选择最合适的开发平台提供参考。
34 3

推荐镜像

更多