Android: 支持向后兼容

Android: Supporting backward competibility

我感到困惑的是,当我们在 android studio 中构建项目时,我们被要求定义我们想要支持的位置,直到最近,如果我们不包含支持库会怎样它支持向后兼容?那么我得到的只有最新版本的方法,而旧版本将无法 运行 我们的代码,对吗?我也无法理解 documentation

中的这些行

Note: FragmentActivity is a special activity provided in the Support Library to handle fragments on system versions older than API level 11. If the lowest system version you support is API level 11 or higher, then you can use a regular Activity

但如果我在这种情况下扩展 Activity 而不是 FragmentActivity

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    getSupportFragmentManager().findFragmentById(R.id.frag_map);
}

getSupportFragmentManager 未解决,虽然我正在构建高于 API 11 的项目,但为什么他们说您应该使用 Activity?如果我使用 getSupportFragment 未解决。

稍后在文档中他们说:

If you're using the v7 appcompat library, your activity should instead extend AppCompatActivity, which is a subclass of FragmentActivity. For more information, read Adding the App Bar).

v7 不支持早于 API11 的版本吗?

更新:

根据 24.2.0 及更高版本对 Compat 库支持版本控制的更改,v4 和 v7 的最低支持版本已变得相同,即 API 级别 9。这是什么文档现在说:

Some of the Support Library packages have package names to indicate the minimum level of the API they support, using a v# notation, such as the support-v4 package. Starting with Support Library version 24.2.0 (released in August 2016), the minimum supported API level has changed to Android 2.3 (API level 9) for all support library packages. For this reason, when working with any recent release of the support library, you should not assume that the the v# package notation indicates a minimum API support level. This change in recent releases also means that library packages with the v4 and v7 are essentially equivalent in the minimum level of API they support. For example, the support-v4 and the support-v7 package both support a minimum API level of 9, for releases of the Support Library from 24.2.0 and higher.

主要区别在于各自引入的具体功能。两者都有不同的功能集。例如,AppCompatActivity 位于 v7 而 FragmentActivity 位于 v4。在这种情况下,AppCompatActivity 应该是首选,但其他特征不会相交很多。

阅读此处:https://developer.android.com/topic/libraries/support-library/index.html

免责声明: 在选择支持最低版本时,您必须谨慎选择交叉版本。因此,强烈建议参考文档,因为 Android API 更新非常快,这些答案已经过时了。


原始答案:

你把自己弄糊涂了。真的很简单。据我了解:

  • 支持 类 需要支持组件,即 Activity、片段等。因此,支持片段管理器需要 FragmentActivityAppCompatActivity。因此,在使用 getSupportFragmentManager 时不包含支持库必然会导致编译时错误。
  • 由于 Fragment 是在 API 级别 11 引入的,因此 FragmentActivity 将用作 API 级别 < 11 的支持组件,这样您就不必为每个 Android 版本中发布的标准和关键 Android 功能编写类似 if(Build.VERSION_CODES < HONEYCOMB){} 的代码。 但是 FragmentActivity 在 v4 兼容库中。如果您不打算支持那个背部,请使用 v7,AppCompatActivity
  • 您的常规 Activity 应该是您的目标 Android APIs(android:targetSdkVersion).
  • 的 Activity

另见,