Android:支持向后竞争力

时间:2017-05-12 09:45:49

标签: java android android-fragments android-support-library

我很困惑,当我们在android studio中构建我们的项目时,我们被要求定义从哪里支持到最新,如果我们不包括支持库,它说它支持向后兼容性呢?那么我得到的方法只有最新版本,旧版本无法运行我们的代码,对不对?我也无法理解documentation

中的这些行
  

注意:FragmentActivity是支持库中提供的一项特殊活动,用于处理早于API级别11的系统版本上的片段。如果您支持的最低系统版本是API级别11或更高,那么您可以使用常规活动

但是如果我在这种情况下扩展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是未解决的。

后来在文档中他们说:

  

如果您正在使用v7 appcompat库,那么您的活动应该扩展AppCompatActivity,它是FragmentActivity的子类。有关更多信息,请阅读添加应用栏。

v7不支持早于API 11的版本吗?

1 个答案:

答案 0 :(得分:1)

UPDATE:

根据Compat libs支持版本24.2.0及更高版本的更改,v4和v7的最低支持版本已经变得相同,即API级别9.以下是文档现在所说的内容:< / p>

  

某些支持库包具有要指示的包名称   他们支持的最低API级别,使用v#表示法等   作为support-v4包。从支持库版本开始   24.2.0(2016年8月发布),支持的所有支持库包的最低支持API级别已更改为Android 2.3(API级别9)。   因此,在使用最新版本的支持时   库,你不应该假设v#包符号   表示最低API支持级别。最近版本中的更改   也意味着具有v4和v7的库包本质上是   相当于他们支持的最低API级别。例如,   support-v4和support-v7包都支持最低API级别   9,对于24.2.0及更高版本的支持库版本。

主要区别在于每个引入的具体功能。两者都有不同的功能集。例如,AppCompatActivity位于第7位,而FragmentActivity位于第4位。在这种情况下,AppCompatActivity应该是首选,但其他功能不会相互交叉。

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

免责声明: 在选择支持最低版本时,您必须仔细选择相交版本。因此,强烈建议引用文档,因为Android API更新速度非常快,而且这些答案已经过时。

原始答案:

你自己很困惑。这真的很简单。根据我的理解:

  • 支持类需要支持组件,即活动,片段等。因此,支持片段管理器需要FragmentActivityAppCompatActivity。因此,在使用getSupportFragmentManager时不包括支持库必然会产生编译时错误。
  • 由于Fragment是在API级别11引入的,因此FragmentActivity将用作API级别的支持组件&lt;因此,您不必为每个Android版本中发布的标准和重要Android功能编写代码if(Build.VERSION_CODES < HONEYCOMB){}。 但是FragmentActivity在v4 compat lib中。如果您不打算支持该功能,请使用v7,AppCompatActivity
  • 您的常规活动应该来自目标Android API(android:targetSdkVersion)的活动。

另见Activity, AppCompatActivity, FragmentActivity, and ActionBarActivity: When to Use Which?