什么是 Activity?
你可以把 Activity 想象成一个“屏幕”或者“窗口”,它是 Android 应用程序中与用户进行交互的一个单一屏幕。

- 一个 App 通常由多个
Activity组成,一个微信 App 就有登录Activity、聊天列表Activity、聊天窗口Activity、朋友圈Activity等等。 - 每个
Activity都有自己的生命周期,负责处理用户的输入事件(如点击、滑动)和绘制自己的 UI 界面。
Activity 的核心生命周期
理解 Activity 的生命周期是掌握 Android 开发的关键。Activity 从创建到销毁会经历一系列的状态变化,这些状态由系统管理,并通过一系列回调方法通知开发者。
以下是 Activity 生命周期的主要方法,按照典型的调用顺序排列:
onCreate()
- 调用时机:
Activity被创建时调用,这是生命周期中第一个调用的方法。 - 作用:进行一些一次性的初始化工作。
- 设置布局文件(
setContentView(R.layout.activity_main))。 - 初始化数据。
- 绑定事件监听器。
- 设置布局文件(
- 注意:此方法只会调用一次。
onStart()
- 调用时机:
Activity即将对用户可见时调用,它紧跟在onCreate()之后,或者在Activity从不可见变为可见时(从另一个Activity返回)。 - 作用:
Activity已经准备好显示,但可能还没有出现在前台,通常这里可以做一些轻量级的操作,比如注册一个广播接收器来监听系统变化。
onResume()
- 调用时机:
Activity位于前台,并且可以与用户进行交互时调用,它紧跟在onStart()之后。 - 作用:
Activity处于“运行”状态,此时用户的所有输入都会被这个Activity捕获,通常在这里启动动画、摄像头等需要前台交互的资源。
onPause()
- 调用时机:系统即将启动另一个
Activity(或另一个应用)时调用,当前Activity会部分被遮盖或完全不可见。 - 作用:
- 保存关键数据:因为
onPause()返回后,Activity可能随时被销毁,所以在这里保存用户未提交的数据是很好的时机。 - 释放资源:停止消耗 CPU 的动画、停止摄像头预览、释放网络连接等。
- 保存关键数据:因为
- 注意:这个方法的执行速度要快,因为下一个
Activity必须等待它执行完毕才能显示。
onStop()
- 调用时机:
Activity完全不可见时调用,用户导航到了另一个Activity,或者按了 Home 键。 - 作用:
- 释放更重的资源:在
onPause()中没来得及释放的资源可以在这里释放,例如复杂的后台线程。 - 停止所有非必要的操作,以节省电量。
- 释放更重的资源:在
- 注意:
Activity实例仍然保留在内存中,如果系统需要内存,它可能会被销毁(调用onDestroy()),否则用户返回时可以快速恢复(调用onRestart()->onStart()->onResume())。
onDestroy()
- 调用时机:
Activity即将被销毁时调用,这是生命周期中最后一个调用的方法。 - 作用:进行最终的清理工作,
- 停止所有在后台运行的线程。
- 解除绑定的服务。
- 移除所有的回调引用。
onRestart()
- 调用时机:
Activity从Stopped状态(不可见)重新变为Started状态(可见)时调用,它发生在用户从其他Activity返回到当前Activity之前。 - 作用:很少使用,通常用于进行一些特殊的恢复逻辑。
Activity 的基本用法
创建一个 Activity
-
创建 Java/Kotlin 类:继承自
Activity或其子类(如AppCompatActivity,为了兼容性推荐使用AppCompatActivity)。// MyActivity.kt import androidx.appcompat.app.AppCompatActivity import android.os.Bundle class MyActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_my) // 加载布局文件 } } -
创建布局文件:在
res/layout/目录下创建对应的 XML 文件,activity_my.xml。
(图片来源网络,侵删)<!-- res/layout/activity_my.xml --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:text="Hello, My Activity!" android:gravity="center" /> -
在 AndroidManifest.xml 中注册:这一步非常重要! 每一个
Activity都必须在AndroidManifest.xml文件中声明,否则系统无法找到它。<!-- AndroidManifest.xml --> <manifest ...> <application ...> <!-- 默认启动的 Activity --> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 我们新创建的 Activity --> <activity android:name=".MyActivity" android:exported="false" /> </application> </manifest>android:name: 指定Activity的类名, 代表当前包名。android:exported: 表示该Activity是否能被其他应用调用。false表示私有。LAUNCHER和MAIN: 这两个intent-filter组合表示该Activity是应用的入口点,会出现在桌面上。
启动一个 Activity
通过 Intent(意图)来启动 Activity。Intent 是 Android 中不同组件间通信的“信使”。
从当前 Activity 启动另一个 Activity:
// 在 MainActivity 的某个方法中,比如按钮点击事件里 val intent = Intent(this, MyActivity::class.java) startActivity(intent)
向启动的 Activity 传递数据:

// 发送方
val intent = Intent(this, MyActivity::class.java)
intent.putExtra("message_key", "你好,MyActivity!")
startActivity(intent)
// 接收方 (在 MyActivity 的 onCreate 或其他方法中)
val message = intent.getStringExtra("message_key")
// 使用 message...
关闭一个 Activity
调用 finish() 方法来关闭当前 Activity,它会销毁当前 Activity 并返回到上一个 Activity。
// 在 MyActivity 中 finish() // 关闭 MyActivity
进阶概念
Activity 启动模式
启动模式决定了 Activity 实例在任务栈中的行为,通过在 AndroidManifest.xml 中为 <activity> 标签设置 android:launchMode 属性来指定。
standard(默认模式): 每次启动都会创建一个新的Activity实例。singleTop: 如果要启动的Activity已经在任务栈的顶部,则不会创建新的实例,而是会调用其onNewIntent()方法。singleTask: 如果要启动的Activity已经存在于任务栈中,则不会创建新实例,而是会把它上面的所有Activity都出栈,使其成为栈顶,并调用其onNewIntent()方法,非常适合作为应用的首页。singleInstance: 创建一个新的任务栈来存放这个Activity,并且这个任务栈中只有这一个Activity实例,其他应用可以通过Intent直接启动它。
Task (任务)
Activity 是按“任务”来组织的,一个任务就是一组 Activity 的集合,用户可以来回导航这些 Activity,当你从主屏幕启动一个应用时,系统会为其创建一个新的任务,并将该应用的 LAUNCHER Activity 放入栈底。
Fragment (碎片)
Fragment 是 Activity 中可重用的一部分 UI 和行为,它必须嵌入在 Activity 中,一个 Activity 可以包含多个 Fragment,并且一个 Fragment 也可以被多个 Activity 重用,这使得构建灵活的、适配不同屏幕尺寸(如手机和平板)的 UI 变得非常容易。
| 概念 | 描述 |
|---|---|
| 定义 | 应用的一个单一屏幕,与用户交互。 |
| 生命周期 | onCreate() -> onStart() -> onResume() -> (前台运行) -> onPause() -> onStop() -> onDestroy() |
| 核心作用 | onCreate() 初始化,onResume() 获取焦点,onPause() 保存数据/释放资源,onDestroy() 销毁。 |
| 启动方式 | 使用 Intent 和 startActivity()。 |
| 注册 | 必须在 AndroidManifest.xml 中声明。 |
| 启动模式 | 控制实例在任务栈中的创建和管理方式。 |
掌握 Activity 是 Android 开发的第一步,理解其生命周期和启动机制对于构建稳定、高效的应用至关重要。
