(三十二)Android开发中AppCompatActivity和Activity之间的详细区别
在 Android 开发中,AppCompatActivity 和 Activity 是两个核心类,用于创建和管理应用程序的用户界面。尽管它们功能上有重叠,但它们之间存在显著的区别。本文将详细讲解 AppCompatActivity 和 Activity 的区别,并结合代码示例和具体使用场景进行说明。
1. 继承关系
-  Activity
 Activity是 Android 系统中活动的基础类,位于android.app包中。它是所有活动类的基类,负责管理活动的生命周期(如onCreate、onDestroy等)。它是 Android 原生的核心组件。
-  AppCompatActivity
 AppCompatActivity是 Android 兼容性库(AndroidX)中的类,位于androidx.appcompat.app包中。它继承自FragmentActivity,而FragmentActivity又继承自Activity。因此,AppCompatActivity是Activity的间接子类,增加了兼容性相关的功能。
2. 功能差异
以下是 AppCompatActivity 和 Activity 在功能上的主要区别:
-  主题和样式 - AppCompatActivity:支持 Material Design 主题和样式,并通过兼容性库在 Android 5.0(API 21)以下的设备上也能使用这些特性。
- Activity:不具备内置的兼容性支持,开发者需要手动处理不同版本的主题和样式兼容性。
 
-  ActionBar 支持 - AppCompatActivity:内置对- ActionBar的支持,可在 Android 3.0(API 11)以下的设备上使用。
- Activity:在 Android 3.0 以下的设备上不支持- ActionBar,需要额外实现。
 
-  Fragment 支持 - AppCompatActivity:支持使用 AndroidX 的- Fragment(- androidx.fragment.app.Fragment),这是现代 Android 开发的标准。
- Activity:仅支持旧的- android.app.Fragment,已被 AndroidX 替代。
 
-  Toolbar 支持 - AppCompatActivity:支持将- Toolbar设置为- ActionBar,提供了更大的灵活性。
- Activity:不支持直接将- Toolbar作为- ActionBar,需要开发者手动实现。
 
3. 使用场景
根据功能差异,AppCompatActivity 和 Activity 适用于不同的开发场景:
-  AppCompatActivity的使用场景- 需要支持 Material Design 主题和样式的应用程序。
- 需要在 Android 5.0 以下的设备上使用 ActionBar或Toolbar。
- 使用 AndroidX 的 Fragment管理界面。
- 追求跨版本兼容性,确保应用在旧设备上也能正常运行。
 
-  Activity的使用场景- 仅针对 Android 5.0 及以上设备开发,不需要兼容旧版本。
- 不使用 Material Design 主题或 ActionBar/Toolbar等高级功能。
- 项目需求简单,倾向于使用原生的 Android API。
 
4. 代码示例
以下通过代码示例展示两者的具体用法差异:
使用 AppCompatActivity
 
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.appcompat.widget.Toolbarclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 设置 Toolbar 作为 ActionBarval toolbar = findViewById<Toolbar>(R.id.toolbar)setSupportActionBar(toolbar)// 使用 AndroidX Fragmentval fragment = MyFragment() // 假设 MyFragment 继承自 androidx.fragment.app.FragmentsupportFragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commit()}
}
说明:
- setSupportActionBar是- AppCompatActivity提供的方法,用于设置- Toolbar。
- supportFragmentManager是 AndroidX 的 Fragment 管理器,适用于现代开发。
使用 Activity
 
import android.app.Activity
import android.os.Bundle
import android.os.Buildclass MainActivity : Activity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)// 在 Android 5.0 及以上设备上使用 ActionBarif (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {val actionBar = actionBaractionBar?.setDisplayHomeAsUpEnabled(true)}// 使用旧的 android.app.Fragmentval fragment = MyFragment() // 假设 MyFragment 继承自 android.app.FragmentfragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commit()}
}
说明:
- Activity需要手动检查 API 版本来使用- ActionBar,且不支持旧设备上的兼容性。
- fragmentManager是旧的 Fragment 管理器,仅适用于- android.app.Fragment。
5. 总结
- AppCompatActivity是- Activity的子类,借助 Android 兼容性库(AndroidX)提供了更丰富的功能,如 Material Design 主题、跨版本的- ActionBar和- Toolbar支持,以及现代的 Fragment 管理。它是现代 Android 开发的首选,特别适合需要兼容多个 Android 版本的项目。
- Activity是 Android 的原生基类,功能较为基础,适合简单项目或仅支持较新版本 Android 的场景。
在实际开发中,除非有特殊需求(例如仅支持 Android 5.0+ 且无需高级功能),建议优先使用 AppCompatActivity,以获得更好的兼容性和开发体验。
