向后兼容和向前兼容的概念

向后兼容(Backwards compatibility):较高版本的程序能够处理较低版本程序产生的数据。

比如word2007版本的word软件可以打开word2003创建的文件。

windows也是一个系统软件,在这个平台上开发的程序,就相当于是程序产生的数据,比如说window7上可以正常运行在window xp上开发的大部分程序。

向前兼容(Forwards Compatibility):比较老、比较低的版本的程序可以处理较高版本程序产生的数据。

例如 word 2003版本可以在转换器的帮助下打开word2007版本创建的doc文档。

相对性的关系

backward和forward,可以大致理解成新和旧。而新旧是相对的,一个旧软件不能跑在新硬件上,既可以说是这个软件不向前兼容硬件,也可以说是这个硬件不向后兼容软件。

再如软件和协议的兼容,新软件不兼容旧协议,既可说是软件不向后兼容协议,也可以说协议不向前兼容软件。 所以搞清楚是什么对什么的兼容性,谁在前面,谁在后面,就能区分向前向后了。

所以碰到兼容性的概念的问题时,是可以从新旧两个方向去考虑。

Android 中的兼容性

Android的系统版本(比如 8.0、7.0、6.0、5.0、4.x等)与运行在其上的App就存在相对的关系。下面是针对App而言的兼容性

向后兼容:

比如很多app是支持到比较低的版本:2.3,4.x等,可以运行在低于targetSdk的系统上。这个是通过在开发中设置minSdk ,supportlibray,运行时版本的判断等来实现的。app具有了向后兼容的性质,也可以说Android系统具有了向前兼容性。

android 向后兼容很多情况是通过支持库(support library)来实现的。比如appcompat-v4、appcompat-v7使得低版本手机可以支持Material Design。

支持库的原理是这样的,如果应用调用其中一个支持类的方法,则支持库的行为将取决于运行应用的 Android 版本。如果框架提供必要的功能,则支持库将通过调用框架执行任务。如果应用在旧版本的 Android 上运行,且框架未显示所需的功能,则支持库自身可能会尝试提供功能或什么都不做。无论是哪一种情形,应用通常都不需要检查其在哪一版本的 Android 上运行,而是通过支持库执行检查并选择适当的行为。通常情况下,名称以 …Compat(如 ActivityCompat)结束的类即是如此。

对app 的向前兼容

比如说应用商店的很多app,targetSdk是低于android7.0,但是还是可以正常安装到android 7.0的设备上,似乎是app自动具有了向前兼容性,而系统具有向后兼容性。

那这就要说targetSdk这个参数的作用了,如果实际运行的android版本号高于targetSdkVersion,那么手机会按照targetSdkVersion设置的版本号来运行。当实际android版本号不高于targetSdkVersion时按照实际的手机版本号运行apk。

比如说在新版上android N删除了一些方法或者更改了一些方法的签名,App的targetSdkVersion 是android M,那么在运行到android N上也不会报出错误,因为是采用targetSdkversion的版本来跑的,这样调用的方法也是没有变化的,还是采用的Android M中的代码。那这个就带来一个问题,是Android系统需要做更多的兼容性代码,系统会越来越膨胀。

这个作用机制还有一层含义是: 如果targetversion 低于android N,那么也不可以采用android N新的方法和特性。

个人的总结,如果有错误或者补充,欢迎指出。

参考资料

android版本向上兼容吗,Android 的向前兼容和向后兼容相关推荐

  1. 向下兼容、向上兼容、向前兼容、向后兼容

    摘要: 简要辨析向下兼容.向上兼容.向前兼容.向后兼容四个概念之间的关联与联系.简言之,向上兼容等同于作向前兼容,向下兼容等同于向后兼容.主流使用的是向前兼容和向后兼容.向后兼容中"后&qu ...

  2. 详解向下兼容、向上兼容、向前兼容、向后兼容

    解析 向下兼容.向上兼容.向前兼容.向后兼容四个概念之间的关联与联系: 向上兼容等同于作向前兼容,向下兼容等同于向后兼容.主流使用的是向前兼容和向后兼容.向后兼容中"后"指&quo ...

  3. 向前兼容、向后兼容、向上兼容、向下兼容

    定义 此处先给出百度百科上的定义 向前兼容:是一个以较新版本编译的程序集是否可以在较老版本上执行的问题. 向后兼容:是一个以较早版本编译的程序集是否可以在较新版本上执行的问题. 向上兼容(Upward ...

  4. 什么是向前兼容和向后兼容?

    1 简述 博主的书签页一直留着一个问题,软件的向前兼容和向后兼容,以前一直被这个问题所困扰,今天来记录 2 向前兼容和向后兼容 从软件行业的起源理解这两个概念就不会很难,软件起源于国外(个人理解),因 ...

  5. 你知道我们常说的“向前兼容”和“向后兼容”都是什么意思吗?

    背景: 今儿组内随便聊天,说到代码的"向前兼容"和"向后兼容".开始聊得都很嗨皮,可是越到后来我聊得和他们说的越是大相径庭.真应了那句话了:"你以为你 ...

  6. 兼容 向前兼容 向后兼容

    向前兼容:是指可以使用软件的未来版本 向后兼容:指可以使用软件的以前版本 P108并非所有软件或者文件都要求向前兼容或向后兼容,这是软件设计者需要决定的产品特性,而软件测试员应改为检查软件向前或向后兼 ...

  7. sql2000 mysql 兼容_sql2005兼容2000 | 向后兼容组件

    这个包可以让你的SQLServer2005和SQLServer2008都兼容. 相关软件软件大小版本说明下载地址 sql2005兼容2000 | 向后兼容组件顾名思义嘛就是可以让你的SQL Serve ...

  8. camera android 版本,Camera for Android

    Camera for Android 介绍 Camera for Android We have designed HD camera app for you. Video capture featu ...

  9. unity android 版本,Unity2019与Android混合开发

    0. 开始前的版本对齐 Unity版本:Unity2019.3.4f1 AndroidStudio版本:3.5.3 1. Unity -- 准备项目 新建项目 打开File -> Build S ...

最新文章

  1. 深入思考:算法工程师的落地能力具体指什么,如何提升自己的落地能力?
  2. 安卓隐藏摄像_侧置摄像与隐藏前摄,拒绝单调乏味,这两款国产5G手机独具匠心...
  3. php编译称opcode文件,PHP源码保护和性能加速
  4. nvidia TX2 CUDA yolov5环境搭建
  5. 如何打造一个让粉丝一见就能收钱的朋友圈
  6. php player baidu,BaiduPlayer.php
  7. 墨刀和Axure RP:设计App原型图就是如此简单
  8. cocos creator js 获取屏幕宽度
  9. 微信公众号开发清理缓存
  10. android发送短信验证码并自动获取验证码填充文本框
  11. BZOJ3787 gty的文艺妹子序列 【树状数组】【分块】
  12. python中path函数_示例1-path函数
  13. 分享一个淘宝/天猫/京东/阿里 图片抓取工具
  14. 域名网在线出售域名源码
  15. Match Points CodeForces 1156C 二分答案
  16. 方便快捷,浏览器利器——Vimium(详解)
  17. 时间序列数据分析与预测之Python工具汇总
  18. 【云栖大会】阿里巴巴成立“达摩院” 引入顶尖科学家3年研发投入将超千亿
  19. 数据结构实验 二叉树的基本操作
  20. 微信小程序轮播图高度与图片高度不匹配问题

热门文章

  1. Facebook背后的开源力量
  2. 图片上传怎么搞?!阿里云OSS对象存储教你快速实现!
  3. 转:程序员必读书单 1.0
  4. V2V-PoseNet:Voxel-to-Voxel Prediction Network for Accurate 3D Hand and Human Pose Estimation from...
  5. virt-v2v 虚拟机到虚拟机的转换详解
  6. C语言 06.函数和多文件编程
  7. MacBook随笔之快捷键二(访达和系统快捷键)
  8. 特斯拉2021年自动驾驶,特斯拉自动驾驶技术专利
  9. educoder算法设计与分析 实验五回溯法
  10. 如何用研发效能搞垮一个团队?