SuppressLint黄色警告的原因以及解决办法
最近在做项目的时候,碰到方法的前面和类的前面有时会出现@SuppressLint或者@SuppressWarnings这样的黄色警告,看起来很不舒服,于是上网搜集了一些相关资料。发现这些警告的出现其实是由于我们编写代码时的一些不规范的写法导致,解决这些问题其实是能提高我们程序的安全性、可用性和性能的。接下来就让我为大家一一说明。
1、@SuppressLint(“DrawAllocation”)
原因:我们都知道View及其子类的OnDraw(Canvas canvas)方法会实时调用来更新界面的,然而有时我们会在onDraw(Canvas canvas)方法中实例化对象(如Paint paint=new Paint()),这样就会影响我们程序的效率。
解决办法:将这些对象改为类的成员变量。
2、@SuppressWarnings(“rawtypes”)和@SuppressWarnings({ “unchecked”, “rawtypes” })
不规范写法:Class clazz = Class.forName(“android.view.Display”);
正确写法:Class<?> clazz = Class.forName("android.view.Display");
3、@SuppressLint(“HandlerLeak”)
原因:Handler在Android中用于消息的发送与异步处理,常常在Activity中作为一个匿名内部类来定义,此时Handler会隐式地持有一个外部类对象(通常是一个Activity)的引用。当Activity已经被用户关闭时,由于Handler持有Activity的引用造成Activity无法被GC回收,这样容易造成内存泄露。
解决办法:将其定义成一个静态内部类(此时不会持有外部类对象的引用),在构造方法中传入Activity并对Activity对象增加一个弱引用,这样Activity被用户关闭之后,即便异步消息还未处理完毕,Activity也能够被GC回收,从而避免了内存泄露。
public static class MyHandler extends Handler {private WeakReference<Activity> referencepublic MyHandler(Activity activity) {reference = new WeakReference<Activity>(activity);}@Overridepublic void handleMessage(Message msg) {if (reference.get() != null) {switch (msg.what) {case 0:// do something...break;default:// do something...break;}}}}
另一种情况:
不规范的写法:private Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {};};
正确的写法:private Handler mHandler = new Handler(new Handler.Callback() {@Overridepublic boolean handleMessage(Message msg) {return false;}});
4、@SuppressLint(“SimpleDateFormat”)
不规范写法:SimpleDateFormat format = new SimpleDateFormat(pattern);
正确写法:SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.getDefault());
5、@SuppressLint(“DefaultLocale”)
不规范写法:String lower = string.toLowerCase();
boolean b = “String”.toUpperCase().equals(“STRING”);
正确写法:String lower = string.toLowerCase(Locale.getDefault());
boolean b = “String”.toUpperCase().equals(“STRING”);
转自:https://blog.csdn.net/qq_34706837/article/details/54964306
SuppressLint黄色警告的原因以及解决办法相关推荐
- SAS中修改一个表为编辑模式的时候不成功并给出警告的原因及解决办法
今天看朱世武老师的<SAS编程技术教程>一书的时候,遇到一个问题,就是在SAS中打开一张表之后,右击Edit Mode,弹出了下面的警告框: 并且表格不能切换到编辑模式.经过在谷歌中搜索一 ...
- Python如何安装模块,python模块安装失败的原因以及解决办法
前言 今天来给刚开始学习python的朋友讲解一下 如何安装python模块, python模块安装失败的原因以及解决办法 很多朋友拿到代码之后,就开始复制粘贴 --> 然后右键进行运行 结果就 ...
- Socket高并发出现TIME_WAIT的原因以及解决办法
最近公司项目遇到个问题,在Socket并发量较大的情况下,每次服务端发送完数据后,Sevice端采取主动Close的方断开连接.客户端用短连接的方式发送请求,会出现大量请求返回TIME_WAIT的现象 ...
- 服务器报错nginx 502 Bad Gateway的原因以及解决办法
网站页面出现502badgateway怎么办?今天我们来分析一下原因和解决办法. 一.nginx 502 Bad Gateway出现的原因: nginx出现502多数是属于后端的问题,后期就是PHP的 ...
- oracle library cache lock,【案例】Oracle等待事件library cache lock产生原因和解决办法...
[案例]Oracle等待事件library cache lock产生原因和解决办法 时间:2016-12-07 18:56 来源:Oracle研究中心 作者:网络 点击: 次 天萃荷净 O ...
- 服务器越来越慢的原因及解决办法
随着各种主机产品的推出,服务器出现的问题各式各样,由于虚拟主机都是同时运行,便会对服务器产生过大的压力,从而导致服务器的速度越来越缓慢,下面和大家分享一下服务器越来越慢的原因及解决办法. 1.虚拟主机 ...
- iis 无法连接mysql_远程无法连接SQL2000及MySQL的原因和解决办法
远程无法连接SQL2000及MySQL的原因和解决办法 时间:2019-11-10 11:06 1. 没有在数据库管理面板中设置远程连接IP造成的. 说明:为了提高操作系统的安全性,所有使用了星外安全 ...
- com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1问题出现的原因及解决办法
转自:https://blog.csdn.net/shinchan_/article/details/37818927 com/opensymphony/xwork2/spring/SpringObj ...
- 欠拟合的原因以及解决办法(深度学习)
之前这篇文章,我分析了一下深度学习中,模型过拟合的主要原因以及解决办法: 过拟合的原因以及解决办法(深度学习)_大黄的博客-CSDN博客 这篇文章中写一下深度学习中,模型欠拟合的原因以及一些常见的解决 ...
最新文章
- github报错“remote: Support for password authentication was removed on August 13, 2021. Please use a p”
- Redux 莞式教程 之 简明篇
- Python-dataframe合并(merge函数)
- Emerged strategy 涌现战略
- CHM文件显示目录无法显示内容的解决方案
- 内存的静态分配和动态分配的区别【转】
- python3之time模块
- 高等数学下-赵立军-北京大学出版社-题解-练习8.3
- java过滤html标签获取纯文本信息
- linux模块加载和模块卸载时出现的问题
- python OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized
- 前端局部自动刷新_jQuery实现AJAX定时刷新局部页面实例
- angularjs框架
- 华容道(java版)
- 统计学习方法 第八章总结
- [BI项目记]-搭建代码管理环境之客户端
- Maven使用详解,非常详细
- 中国石油大学(北京)-《 公共社交礼仪 》-​​​​​​​第二阶段在线作业
- 绕过tp路由器管理密码_TP-Link路由器登录密码怎么重置【详细介绍】
- 《分解因数》:质因数分解