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

时间:2015-12-22 20:58:23

标签: android

当我看到这段文字时,我正在弄乱MeasureSpec

  

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

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

1 个答案:

答案 0 :(得分: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);
        }
    }

正如您所看到的,它的返回值取决于sUseBrokenMakeMeasureSpec类构造函数中value is assigned View的值:

  sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1;

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