1

即使这是一个普遍的问题,我也会用一个更容易理解的例子来问它。

场景:

  1. 我正在使用支持库 7 并使用操作栏功能。用户正在使用 Android 2.2 (API 8) 的设备上安装应用程序。
  2. 我正在使用支持库 7 并使用操作栏功能。用户正在使用 Android 4.3 (API 18) 的设备上安装应用程序。

很明显,在运行时场景 1 将运行受支持库的代码。但是情况 2 会发生什么?它会运行操作系统代码还是支持库代码。

我真的希望它运行操作系统代码。

编辑
我知道 Java 的工作方式是通过在构建时确定的完全限定名称来解析方法(正如@adelphus 所写的那样)。因此支持库代码将运行。但如果我是实现支持库的人,我会一直执行以下操作:

  1. 在运行时检查操作系统的版本
  2. 如果操作系统具有当前对象/方法,我将调用操作系统实现(实际上在这种情况下,支持库只是操作系统功能的包装器)。
  3. 如果这是一个旧操作系统,我将自己实现该行为

那么,它是作为包装器在较新版本上起作用,还是在两种情况下都使用内部实现?

谢谢

4

1 回答 1

1

它将运行支持库。

Java(以及 Android 应用程序)的工作方式是方法通过在构建时确定的完全限定名称来解析。由于您将根据支持库构建应用程序,因此无论执行它的 Android 版本如何,都会调用它。

实际上,它对最终用户应该没有影响。支持库的重点是为不具备新版本功能的旧版本 Android 提供相同的行为。如果最终结果相同,您为什么要关心它是否调用支持库?

于 2013-10-25T13:05:53.143 回答