android版本向上兼容吗,Android 的向前兼容和向后兼容

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

向后兼容(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新的方法和特性。

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

参考资料

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值