targetSdkVersion是android向前兼容的主要方式,怎么说呢?官方是这样说的:

除非更新targetSdkVersion,否则不改变应用的行为。 这允许您在处理行为更改之前使用新的API(如您更新过的compileSdkVersion)

简单的说就是你的应用已经针对这个版本的手机,做了充分的兼容性处理和测试性处理,比如 if(Build.VERSION.SDK_INT >= 23) { ... } ,这样针对不同的SDK版本做不同的处理,这就说明我们不能随便的改变targetSdkVersion得值,我们必须做好充足的兼容性处理和测试处理才行。

在 Android 4.4 (API 19)以后,AlarmManager 的 set() 和 setRepeat() 这两个 API 的行为发生了变化。在 Android 4.4 以前,这两个 API 设置的都是精确的时间,系统能保证在 API 设置的时间点上唤醒 Alarm。因为省电原因 Android 4.4 系统实现了 AlarmManager 的对齐唤醒,这两个 API 设置唤醒的时间,系统都对待成不精确的时间,系统只能保证在你设置的时间点之后某个时间唤醒。虽然api的名字没有改变,但是功能结果已经发生改变,我们设置targetSdkVersion为16,Android4.4之前,那么我们在Android4.4之后运行会出现什么呢?难道就不能用了吗?不准确了吗?

当然不是,系统通过targetSdkVersion来保证Android的向前兼容性,在Android4.4之后的设备上,系统会判断你的targetSdkVersion是否小于19(如下图),如果小于的话,那就按照19之前的api方法,如果大于等于19,那么就按照之后的api方法来走,保证了程序运行的一致性。也就是向前兼容性。

androidstudio sdk版本 android sdkversion_Android

注意: 该targetSdkVersion属性不会阻止您的应用程序安装在高于指定值的平台版本上,但这很重要,因为它向系统指示您的应用程序是否应该继承新版本中的行为更改。如果您未更新 targetSdkVersion到最新版本,则系统会假定您的应用程序在最新版本上运行时需要一些向后兼容性行为。例如,在Android 4.4中的行为更改中AlarmManager,默认情况下使用AlarmManager API创建的警报是不准确的,因此系统可以批量处理应用程序警报并保留系统电源,但如果您的目标API级别低于“19”,系统将保留先前的API行为