对于Android初学开发者来说,

可能会好奇 targetsdkversioin这个配置是用来干嘛的。
也有很多一两年开发经验的 Android码农会在面试中被问到这个问题。

Api Level是个什么东西?

Android的api在版本间变化可能非常大,
有时候一个 api在低版本支持,到了高版本就被删除了。
可以在 develop网站上看到 api level对应的 Android版本,
xxx.jpg

举个例子,Activity.getActionBar()
xxxx.jpg

可以看到 api level 11,也就是说3.0之前是没有这个api的,
3.0之前的机器运行不了用了这个api的app。

targetsdkversioin

以上面 getActionBar()的例子来说,
我们的app现在可以指定 targetsdkversioin = 11,
这意味着安装时会通知系统,开发者已经在 3.0系统上测试过没问题,
如果安装的系统 api level高于11,则会开启兼容模式来运行app。

就像 Android 6.0引入的动态权限申请,
如果你把 targetsdkversioin定位比6.0低的 api level的话,
其实是不需要动态去申请权限,
在app安装时,系统会以兼容模式默认开启这些权限。

然而问题在于,
设定 targetsdkversioin = 21(比如5.0对应的 api level 21),
意味着向系统表明我们只在 5.0系统测试过,
如果是运行在6.0的机器而用户手动关掉所需要的权限的话,
我们的应用是会崩溃的,系统并不会帮我们处理掉兼容性的问题。

@TargetApi

和 targetsdkversioin相对应的还有 @TargetApi这个注解,
还是以上  getActionBar()为例子来说明

如果我们预期app可以运行在 api level < 11的机器上,
而因为UI设计或者其他原因,非要用 getActionBar()方法的时候,
@TargetApi就有作用了

对于这种情况,
通常会在代码中用 Build.VERSION.SDK_INIT 来判断,比如下面的代码,

if(Build.VERSION.SDK_INIT > 10) {....goWithActionBar();
} else {....
}@TargetApi(11)
public void goWithActionBar(){....
}

这意味着 goWithActionBar()这个方法是在 api level以上可以使用的,
不加这个注解的话,编译系统会提示兼容性错误而导致编译不过,
因此 @TargetApi主要是用来抑制编译时的兼容性问题的。

更多Android进阶技术,面试资料系统整理分享,职业生涯规划,产品,思维,行业观察,谈天说地。可以加Android架构师群;701740775。

Android中的 targetsdkversioin相关推荐

  1. Android中实现为TextView添加多个可点击的文本

    这篇文章主要介绍了Android中实现为TextView添加多个可点击的文本,可实现类似Android社交软件显示点赞用户并通过用户名称进入该用户主页的功能,是非常实用的技巧,需要的朋友可以参考下.具 ...

  2. android 弹出fragment,Android中ViewPager获取当前显示的Fragment

    前言 在项目中,有时会用到在ViewPager中显示同样类型的Fragment,同时这样的Fragment的个数是动态的,但是PagerAdapter没有给我们提供getCurrentFragment ...

  3. android 读取内部存储文件格式,Android中的数据储存之文件存储

    当我们在使用各种程序时,其实际上是在和各种数据打交道,当我们聊QQ,刷微博,看新闻,其实都是在和里面的数据交互 例如在聊天时发出的消息,以及在登录时输入的账号密码,其实都是瞬时数据,那什么是瞬时数据呢 ...

  4. android中一种不支持的lua操作

    今天写了一段lua代码,在win32中正常运行,在android中运行无效. 大概是这样的: ------file1.lua----- local t = {} t.str = "this ...

  5. Android中对Log日志文件的分析[转]

    一,Bug出现了, 需要"干掉"它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只 ...

  6. 在Android中进行单元测试遇到的问题

    问题1.Cannot connect to VM  socket closed 在使用JUnit进行测试的时候,遇到这个问题.网上的解释是:使用Eclipse对Java代码进行调试,无论是远程JVM还 ...

  7. android中设置控件获得焦点 (转)

    android中,要使控件获得焦点,需要先setFocus,再requestFocus. 以Button为例:                 btn.setFocusable(true);      ...

  8. Android中怎么使图片显示

    android中经常到利用图片,利用图片时我们都是把图片放在drawable-xxx目录下,因为这里就是存储图片的地方,xxx不用理他,就是关于分辨率而已. 楼主在学习android的时候一直尝试把图 ...

  9. Android中处理崩溃异常

    2019独角兽企业重金招聘Python工程师标准>>> 大家都知道,现在安装Android系统的手机版本和设备千差万别,在模拟器上运行良好的程序安装到某款手机上说不定就出现崩溃的现象 ...

  10. Android中的多线程(字节跳动)

    文章目录 Handler机制(Android中的消息队列机制) Handler机制为Android系统解决了以下两个问题 Handler常用方法 Handler的使用 补充知识点 Handler原理 ...

最新文章

  1. Hinton的胶囊网络不太行?CVPR Oral论文:不比卷积网络更「强」
  2. Notepad++自用主题推荐
  3. 探秘网络背后黑产链:黑客攻击木马病毒机构内鬼防不胜防
  4. php 真实访问次数,PHP将访问次数写入文件下
  5. python matplotlib.pyplot中的.plot()和.scatter()以及.subplot()和.add_axes()区别
  6. [翻译] VLDContextSheet
  7. Python + Selenium 基础篇 - 打开和关闭浏览器
  8. CodeForces - 1312C Adding Powers(思维+位运算)
  9. 点击图片弹出固定或自适应窗口
  10. [Wannafly挑战赛2D-Delete]最短路
  11. linux 文件句柄 sock,linux socket句柄
  12. CCF2014123集合竞价(C语言版)
  13. hadoop、spark、hive、solr、es与YDB在车辆即席分析上的对比分析
  14. idea中找到VM options选项
  15. java程序员的cto成长之路
  16. 塞力斯是鸿蒙系统吗,赛力斯“驼峰”智能增程系统为何物?一亮相就引起行业沸腾...
  17. 【javascript】JS+DOM实现图片库(改进版)
  18. 线上拼团活动方案怎么制作设计?
  19. 在牛津大学就读是怎样的体验?
  20. 2012年百度实习生招聘——java开发

热门文章

  1. liunx服务程序的安装及配置
  2. Android开发新手学习总结(一)——使用Android Studio搭建Android集成开发环境
  3. 配置springMVC时出现的问题
  4. python培训拾遗
  5. 数据库设计经验谈[2]
  6. MySoft.Data入门篇:编写业务逻辑
  7. spring或springmvc自动生成applicationcontext.xml或springmvc文件(此文转载和借鉴多篇文章)...
  8. bzoj 2194: 快速傅立叶之二 FFT
  9. Spring MVC 基于URL的映射规则(注解版)
  10. V4L2驱动程序架构