模仿安卓源码,手写过时的方法兼容低版本

简介: 经常写代码时候,会看到某个方法上面画一条横线,注释写的是此方法已过时,推荐使用XXX某某方法替代。我觉得这个提示很有用。在实际开发中,有时候老项目版本迭代之后,用了最新的API,为了兼容老版本,要把老方法保留,还要新增很多新方法,无疑增加了工作量。

经常写代码时候,会看到某个方法上面画一条横线,注释写的是此方法已过时,推荐使用XXX某某方法替代。我觉得这个提示很有用。在实际开发中,有时候老项目版本迭代之后,用了最新的API,为了兼容老版本,要把老方法保留,还要新增很多新方法,无疑增加了工作量。假如这时候引入安卓源码的这种设计思想,问题就会变得很简单了。下面简单的来讲一下:

我们经常会使用getColor(R.color.XXX)获取颜色的资源文件,但是在安卓6.0开始,这个方法被标注为过时,推荐使用两个参数的方法替代,如下图所示:

过时的方法

那么我怎么才能象系统源码那样去做呢?别着急,干货来了。。

首先,写一个方法,加上 @Deprecated 注解,表示这个方法已过时,
然后在上面加上文档注释, @deprecated 请用 {@link 类名#方法名(参数...)} 替代

举例如下,下面是我写的一个工具类:

public class ResourceUtils {

    public static ResourceUtils resourceUtils;
    public Context mContext;

    public ResourceUtils(Context context) {
        this.mContext = context;
    }

    public static ResourceUtils getInstance(Context context) {
        if (resourceUtils == null) {
            synchronized (ResourceUtils.class) {
                if (resourceUtils == null) {
                    resourceUtils = new ResourceUtils(context);
                }
            }
        }
        return resourceUtils;
    }

    /**
     * @param colorResId
     * @removed
     * @deprecated 请用 {@link ResourceUtils#obtainColorResources(int)} 替代
     */
    @Deprecated
    public ResourceUtils getColorResources(int colorResId) {
        mContext.getResources().getColor(colorResId);
        return this;
    }

    /**
     * @param colorResId
     * @return
     */
    @TargetApi(23)
    public ResourceUtils obtainColorResources(int colorResId) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            ContextCompat.getColor(mContext,colorResId);
        } else {
            mContext.getResources().getColor(colorResId);
        }
        return this;
    }
}

调用方法如下:

调用方法

怎么样?是不是很装(6)逼?别人用这个方法的时候,一看过时了,说明这个方法兼容的版本比你编译的版本要低,那么切换到新的方法就没问题了。有着轻度强迫症我,是不会看到这种过时方法存在的。

小伙伴们,快来试试看吧。从此让你的代码逼格起来!

相关文章
|
6月前
|
Android开发 开发者
Android自定义view之利用drawArc方法实现动态效果
本文介绍了如何通过Android自定义View实现动态效果,重点使用`drawArc`方法完成圆弧动画。首先通过`onSizeChanged`进行测量,初始化画笔属性,设置圆弧相关参数。核心思路是不断改变圆弧扫过角度`sweepAngle`,并调用`invalidate()`刷新View以实现动态旋转效果。最后附上完整代码与效果图,帮助开发者快速理解并实践这一动画实现方式。
176 0
|
4月前
|
安全 数据库 Android开发
在Android开发中实现两个Intent跳转及数据交换的方法
总结上述内容,在Android开发中,Intent不仅是活动跳转的桥梁,也是两个活动之间进行数据交换的媒介。运用Intent传递数据时需注意数据类型、传输大小限制以及安全性问题的处理,以确保应用的健壯性和安全性。
355 11
|
6月前
|
XML 搜索推荐 Android开发
Android改变进度条控件progressbar的样式(根据源码修改)
本文介绍了如何基于Android源码自定义ProgressBar样式。首先分析了系统源码中ProgressBar样式的定义,发现其依赖一张旋转图片实现动画效果。接着分两步指导开发者实现自定义:1) 模仿源码创建一个旋转动画XML文件(放置在drawable文件夹),修改图片为自定义样式;2) 在UI控件中通过`indeterminateDrawable`属性应用该动画。最终实现简单且个性化的ProgressBar效果,附带效果图展示。
430 2
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
558 2
基于Android P,自定义Android开机动画的方法
|
7月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码android版环境配置流程及功能明细
部署需基于 CentOS 7.9 系统,硬盘不低于 40G,使用宝塔面板安装环境,包括 PHP 7.3(含 Redis、Fileinfo 扩展)、Nginx、MySQL 5.6、Redis 和最新 Composer。Swoole 扩展需按步骤配置。2021.08.05 后部署需将站点目录设为 public 并用 ThinkPHP 伪静态。开发环境建议 Windows 操作系统与最新 Android Studio,基础配置涉及 APP 名称修改、接口域名更换、包名调整及第三方登录分享(如 QQ、微信)的配置,同时需完成阿里云与腾讯云相关设置。
|
Android开发
基于android-11.0.0_r39,系统应用的手动签名方法和过程
本文介绍了基于Android 11.0.0_r39版本进行系统应用手动签名的方法和解决签名过程中遇到的错误,包括处理`no conscrypt_openjdk_jni-linux-x86_64`和`RegisterNatives failed`的问题。
662 2
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
1215 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
缓存 Java Shell
Android 系统缓存扫描与清理方法分析
Android 系统缓存从原理探索到实现。
484 15
Android 系统缓存扫描与清理方法分析
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
293 2
|
Android开发
Android在rootdir根目录创建自定义目录和挂载点的方法
本文介绍了在Android高通平台的根目录下创建自定义目录和挂载点的方法,通过修改Android.mk文件并使用`LOCAL_POST_INSTALL_CMD`变量在编译过程中添加目录,最终在ramdisk.img的系统根路径下成功创建了`/factory/bin`目录。
717 1
下一篇
oss云网关配置