【问题标题】:Does android always use the newest API to run an app?android 是否总是使用最新的 API 来运行应用程序?
【发布时间】:2015-12-22 20:58:22
【问题描述】:

当我看到这段文字时,我正在与MeasureSpec 搞混:

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

这让我想知道:如果我为 API 14 构建了一个应用程序,但我在 API 22 设备上运行它,它会修复错误还是

【问题讨论】:

  • 试试看。努力吧。
  • 我有,而且似乎,即便如此,我仍希望得到更有经验的开发人员的确认。另外,我做到了,我搜索了证实这一点的文档,但我找不到一个(至少一个在我认识的语法和词典中)。更重要的是,我不认为它应该遵循元数据。

标签: android


【解决方案1】:

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 assignedView 类的构造函数中:

  sUseBrokenMakeMeasureSpec = targetSdkVersion <= JELLY_BEAN_MR1;

所以只有应用的目标会决定行为。通过这种方式,较新的系统可以保持与旧应用程序的兼容性,该应用程序会出现旧行为。

【讨论】:

  • 附录:你知道本机 API(从 java api 调用的那些)是否相同?另外,谢谢你的回答。
  • 理论上目标sdk也可以在native API中查看,但需要进一步研究。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多