Android基础操作-----SuppressLint和SuppressWarnings

一、SuppressLint

1)SuppressLint

Lint是一个静态检查器,它围绕Android项目的正确性、安全性、性能、可用性以及可访问性进行分析。
它检查的对象包括XML资源、位图、ProGuard配置文件、源文件甚至编译后的字节码。
Lint包含了API版本检查、性能检查以及其他诸多特性。
可以使用@SuppressLint标注忽略指定的警告。
如果想去掉的话,可以右键点工程,然后在android tools 中,选择 clear lint marker 就没有这个错误了

其实,既然程序会报出这样的警告,肯定就会有他的不合理之处,只是并不会导致程序发生错误无法运行,我们写的代码平时也不多,所以一般对我们的程序不会有多大的影响,但是他会影响整个程序的安全性及一些其他性能,所以我们还是尽量去避免这写不合理之处。

2)@SuppressLint("NewApi")

我们有时会使用比我们在AndroidManifest中设置的android:minSdkVersion版本更高的方法,此时编译器会提示警告,解决方法是在方法上加上@SuppressLint("NewApi")或者@TargetApi()。
@SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的android lint错误
@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误
举个例子,某个方法中使用了api9新加入的方法,而项目设置的android:minSdkVersion=8,此时在方法上加@SuppressLint("NewApi")和@TargetApi(Build.VERSION_CODES.GINGERBREAD)都可以,以上是通用的情况。
而当你在此方法中又引用了一个api11才加入的方法时,@TargetApi(Build.VERSION_CODES.GINGERBREAD)注解的方法又报错了,而@SuppressLint("NewApi")不会报错,这就是区别。

注意,不管你使用了哪个注解,作用仅仅是屏蔽android lint错误,所以在方法中还要根据api的版本进行判断版本做不同的操作。

3)@SuppressLint("DrawAllocation")

我们从警告的提示来看,Avoid object allocations during draw/layout operations (preallocate and reuse instead),意为避免在绘制/布局中去实例化对象,解决办法:将这些对象改为类的成员变量。
因为在View及其子类的onDraw(Canvas canvas)方法,会实时调用以更新界面,会频繁的创建对象和进行垃圾回收等,这明显就会影响UI的显示性能,这样一个显示很顺畅的用户界面就会因对象分配引起的一些垃圾回收机制进行短暂的停滞。

4)@SuppressLint("HandlerLeak")

在主线程用Handler处理消息出现时会有警告,提示你,这块有内存泄露的危险,handler最好声明为static的

5)@SuppressLint("CommitPrefEdits")

sharedPreferences.edit()时,获取到的Editor必须使用commit或apply来完成操作。所以再没有写commit或apply之前或提示@SuppressLint("CommitPrefEdits");
Editor的commit和apply相比,apply效率跟高,commit方法返回boolean类型,判断是否存储成功。
简略解释:apply先将数据存储到内存,再异步操作存储到磁盘,而commit:写数据时就同步写到磁盘中了,所以效率会低一些。

6)@SuppressLint("RestrictedApi") 

受限制的API,那应该还存在其他的替代方式,就尽量不要使用。

7)@SuppressLint(“SimpleDateFormat”) 

不规范写法:SimpleDateFormat format = new SimpleDateFormat(pattern); 
正确写法:SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault());

8)@SuppressLint(“DefaultLocale”) 

不规范写法:String lower = string.toLowerCase(); 
boolean b = “String”.toUpperCase().equals(“STRING”); 
正确写法:String lower = string.toLowerCase(Locale.getDefault()); 
boolean b = “String”.toUpperCase().equals(“STRING”);

二、@SuppressWarnings

@SuppressWarnings注解用法详解

 

### 关于 `android.suppressUnsupported` 的使用或错误解决方案 #### 背景说明 在 Android 开发过程中,可能会遇到某些 API 或功能不被支持的情况。为了抑制这些警告或错误,开发者可以使用 `@SuppressLint("SuppressUnsupported")` 注解来忽略特定的 lint 检查[^6]。 然而,在实际开发中,如果未正确配置项目或者误用了该属性,则可能导致编译失败或其他异常行为。以下是针对此问题的具体分析以及可能的解决方案: --- #### 解决方案 ##### 方法一:检查 Lint 配置 确保项目的 `lint.xml` 文件已正确定义了需要忽略的规则。例如: ```xml <issue id="SuppressedLint"> <ignore path="src/main/java/com/example/YourClass.java" /> </issue> ``` 上述代码片段表示对指定路径下的类文件禁用 `SuppressedLint` 提醒[^7]。 ##### 方法二:更新 Gradle 插件版本 有时旧版插件可能存在兼容性问题,建议升级到最新稳定版本。修改 `build.gradle` 如下所示: ```gradle plugins { id 'com.android.application' version '8.0.2' apply false } ``` 注意替换为当前最新的可用版本号,并同步项目以应用更改[^8]。 ##### 方法三:移除不必要的 Suppress 属性 如果确实不需要强制压制某个不受支持的功能调用,请直接删除对应的标注声明。比如从源码里删掉下面类似的行: ```java @SuppressWarnings({"deprecation", "suppressUnsupported"}) public void someMethod() {} ``` 这样可以让 IDE 自动检测潜在风险并给出更合理的替代实现建议[^9]。 ##### 方法四:验证目标设备 SDK 版本 确认测试所使用的模拟器或真机满足最低系统要求。假如方法仅适用于 API Level >= 24 ,那么就应该调整 manifest 中定义的 minSdkVersion 值至合适范围之内: ```xml <uses-sdk android:minSdkVersion="24"/> ``` 此外还需留意是否存在多渠道分发场景下差异化设定的影响因素[^10]。 --- #### 示例代码展示 假设我们有一个简单的 Activity 类需要用到已被标记废弃但仍需暂时保留逻辑处理的部分成员变量操作情形时可参考如下写法: ```java // 忽略关于过期API使用的告警信息 @SuppressLint("Deprecated") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this); setContentView(textView); // 明确告知编译工具此处不会引发跨平台执行隐患 @SuppressWarnings("suppressUnsupported") int unsupportedValue = getUnsupportedFeature(); } private int getUnsupportedFeature(){ return Build.VERSION.SDK_INT; } ``` 以上例子展示了如何合理运用相关修饰符达到预期效果的同时保持良好的编程习惯[^11]。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值