android总是使用最新的API来运行应用程序吗?

Aus*_*110 6 android

当我遇到这段文字时,我正在乱搞MeasureSpec:

注意:在API级别17和更低级别,makeMeasureSpec的实现使得参数的顺序无关紧要,并且任何一个值的溢出都可能影响生成的MeasureSpec.RelativeLayout受此错误的影响.针对API级别大于17的应用将获得固定的,更严格的行为.

所以这让我想知道:如果我为API 14构建一个应用程序,但是我在API 22设备上运行它会修复错误还是<API 17的错误仍然存​​在于22设备上?

cse*_*nga 4

makeMeasureSpec (API 17<) 方法的实现如下:

 public static int makeMeasureSpec(int size, int mode) {
        if (sUseBrokenMakeMeasureSpec) {
            return size + mode;
        } else {
            return (size & ~MODE_MASK) | (mode & MODE_MASK);
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它的返回值取决于在类的构造函数中sUseBrokenMakeMeasureSpec分配的View

  sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1;
Run Code Online (Sandbox Code Playgroud)

因此,只有应用程序的目标才能决定行为。通过这种方式,新系统可以保持与旧应用程序的兼容性,从而实现旧行为。