Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi")

例如:AndroidManifest.xml中,我们配置了sdk版本的最低为9,目标sdk为19

    <uses-sdkandroid:minSdkVersion="9"android:targetSdkVersion="19" />

当我们使用了大于sdk版本为9的API时候,编译器就会提示警告。例如:

import android.os.AsyncTask;
import android.os.Build;public class Test {static public<T> void executeAsyncTask(AsyncTask<T, ?, ?> task,T...params){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);}else {task.execute(params);}}
}

警告如下:

Multiple markers at this line- Field requires API level 11 (current min is 9): android.os.AsyncTask#THREAD_POOL_EXECUTOR- Call requires API level 11 (current min is 9): android.os.AsyncTask#executeOnExecutor

截图如下截图如下:

Multiple markers at this line- Field requires API level 11 (current min is 9): android.os.AsyncTask#THREAD_POOL_EXECUTOR- Call requires API level 11 (current min is 9): android.os.AsyncTask#executeOnExecutor

解决方法是在方法上加上@SuppressLint("NewApi")或者@TargetApi()。

那他们之间有什么区别呢,很简单,

@SuppressLint("NewApi")屏蔽一切新api中才能使用的方法报的android lint错误

@TargetApi() 只屏蔽某一新api中才能使用的方法报的android lint错误。

使用@TargetApi(Build.VERSION_CODES.HONEYCOMB)方式解决

import android.annotation.TargetApi;
import android.os.AsyncTask;
import android.os.Build;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
public class Test {static public<T> void executeAsyncTask(AsyncTask<T, ?, ?> task,T...params){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);}else {task.execute(params);}}
}

使用@SuppressLint("NewApi")方式解决

import android.annotation.SuppressLint;
import android.os.AsyncTask;
import android.os.Build;
public class Test {@SuppressLint("NewApi")static public<T> void executeAsyncTask(AsyncTask<T, ?, ?> task,T...params){if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);}else {task.execute(params);}}
}

当然,不管你使用了哪个注解,作用仅仅是屏蔽android lint错误,所以在方法中还要判断版本做不同的操作,例如上述代码。

public class Test {@TargetApi(Build.VERSION_CODES.HONEYCOMB)static public <T> void executeAsyncTask(AsyncTask<T, ?, ?> task,T... params) {// 当版本大于Build.VERSION_CODES.HONEYCOMB时调用的方法if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, params);}// 当版本小于Build.VERSION_CODES.HONEYCOMB时调用的方法else {task.execute(params);}}
}

PS: What is better: @SuppressLint or @TargetApi?

(地址:http://stackoverflow.com/questions/14341042/what-is-better-suppresslint-or-targetapi)

====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址:http://blog.csdn.net/ouyang_peng

====================================================================================

转载于:https://www.cnblogs.com/ouyangpeng/p/8537918.html

我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...相关推荐

  1. android targetapi版本低,我的Android进阶之旅------Android中高低API版本兼容使用@TargetApi或者@SuppressLint(NewApi)...

    Android中高低API版本兼容使用@TargetApi或者@SuppressLint("NewApi") 例如:AndroidManifest.xml中,我们配置了sdk版本的 ...

  2. 我的Android进阶之旅------Android利用Sensor(传感器)实现水平仪功能的小例

    这里介绍的水平仪,指的是比较传统的气泡水平仪,在一个透明圆盘内充满液体,液体中留有一个气泡,当一端翘起时,该气泡就会浮向翘起的一端.    利用方向传感器返回的第一个参数,实现了一个指南针小应用.   ...

  3. 我的Android进阶之旅------Android利用温度传感器实现带动画效果的电子温度计

    要想实现带动画效果的电子温度计,需要以下几个知识点: 1.温度传感器相关知识. 2.ScaleAnimation动画相关知识,来进行水印刻度的缩放效果. 3.android:layout_weight ...

  4. android服务进阶,我的Android进阶之旅------Android服务的生命周期回调方法

    先引用一段官网上的文字 ======================================================================================== ...

  5. 我的Android进阶之旅------Android二级ListView列表的实现

    实现如下图所示的二级列表效果 首先是在布局文件中,布局两个ListView,代码如下: <LinearLayout xmlns:android="http://schemas.andr ...

  6. 我的Android进阶之旅------Android项目目录结构分析

    此文章来自"博客园"博主,仅在此借鉴,学习 1.HelloWorld项目的目录结构 1.1.src文件夹 1.2.gen文件夹 1.3.Android 2.1文件夹 1.4.ass ...

  7. 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

  8. 我的Android进阶之旅------android Matrix图片随意的放大缩小,拖动(转)

    step1:新建一个项目DragAndZoom,并准备一张照片放在res/drawable-hdpi目录下,如下图所示: step2: 设置应用的UI界面,在main.xml中设置: [html] v ...

  9. 我的Android进阶之旅------Android Gusture 手势识别小案例

    Step1: 生成一个Android Gusture Builder程序用于画Gusture然后存储起来用于其它的项目 首先导入  android SDK \android-sdk-windows\s ...

最新文章

  1. 对象检测工具包mmdetection简介、安装及测试代码
  2. Leetcode 455. 分发饼干 解题思路及C++实现
  3. Perl正则表达式--练习1
  4. Linux 路径和目录问题
  5. Jmeter生成自动化和性能多维度测试报告(性能指标和监听器图表)
  6. ssm read time out的原因_自检轮胎暗漏原因_什么是自检轮胎暗漏原因
  7. 从源码角度解析线程池中顶层接口和抽象类
  8. Prim和Kruskal算法
  9. 功能增强的进度条控件(源码)
  10. 判断中文文本是否为utf8编码类型的javascript实现_Go语言实现LeetCode算法:393 UTF-8编码校验...
  11. java将jsp页面表格导出excel表格数据_JSP 导出Excel表格的实例
  12. [IDEA]项目web文件夹找不到
  13. 一个游戏程序员的学习资料
  14. dddd带带弟弟OCR识别验证码
  15. odoo openerp 分享-oe嵌入qweb】用js读取数据库数据,用类似html语言重写web报表
  16. 欺骗的艺术——第二部分(1)
  17. 文件系统的层次结构的理解总结
  18. 发那科pmc地址分配_发那科pmc地址表
  19. 用Qt搭建图书管理系统 (十四)
  20. 刘歌 php,【刘歌乔】姓名算命测试,刘歌乔姓名五格测试,免费名字算命测试,姓名算命最准的网站...

热门文章

  1. 怎样查看.a和so文件中的接口
  2. SDNU 1507.E.The Binding of Isaac
  3. java求两个集合的交集和并集,比较器
  4. Java 语法糖详解
  5. bzoj3140: [Hnoi2013]消毒(二分图)
  6. python中MySQLdb的使用
  7. 关于centos6升级python3.6无法使用pip的问题
  8. ps -ef | grep 查看进程命令
  9. UWP 中的 LaunchUriAsync,使用默认浏览器或其他应用打开链接
  10. 一道超级复杂的js题目