《Android 应用开发基础教程》——第二章:Activity 与生命周期详解
目录
第二章:Activity 与生命周期详解
2.1 什么是 Activity?
作用:
2.2 创建一个 Activity
示例代码
Manifest 注册:
2.3 Activity 生命周期(Life Cycle)
生命周期图解:
2.4 生命周期代码示例(带日志)
2.5 生命周期应用场景
2.6 Activity 的跳转
2.7 Activity 与 Back Stack(返回栈)
2.8 小结
习题答案
1. Activity 生命周期的 7 个核心方法
2. 什么情况下会触发 onRestart()?
3. 如何从 A 页面跳转到 B 页面?代码示例
示例代码:
详细步骤:
带参数跳转示例:
4. 页面暂停播放音乐应该写在哪个生命周期函数中?
原因:
示例代码:
注意事项:
第二章:Activity 与生命周期详解
2.1 什么是 Activity?
Activity 是 Android 应用中的一个屏幕(界面)或用户交互窗口。每一个 Activity 通常对应一个应用功能界面,例如登录页、主页面、设置页等。
作用:
-
用于用户界面展示和交互
-
承载布局(UI)
-
响应用户事件(点击、滑动等)
2.2 创建一个 Activity
每个 Activity 都需要:
-
一个 Kotlin/Java 类,继承自
AppCompatActivity
-
一个 XML 布局文件
-
在
AndroidManifest.xml
中进行注册
示例代码
// MainActivity.kt
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}
}
Manifest 注册:
<activity android:name=".MainActivity" />
2.3 Activity 生命周期(Life Cycle)
Android 会根据用户操作和系统状态,对 Activity 进行不同阶段的管理。
生命周期主要分为 7 个核心方法:
方法名 | 说明 |
---|---|
onCreate() | 第一次创建时调用(初始化) |
onStart() | 页面可见时调用 |
onResume() | 页面进入前台、可交互时调用 |
onPause() | 页面部分被遮挡,失去焦点时调用 |
onStop() | 页面完全不可见 |
onRestart() | 从停止状态重新启动 |
onDestroy() | Activity 被销毁前调用 |
生命周期图解:
(建议记忆该顺序)
onCreate → onStart → onResume↓ ↑onRestart ← onStop ← onPause↓onDestroy
2.4 生命周期代码示例(带日志)
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)Log.d("LifeCycle", "onCreate")}override fun onStart() {super.onStart()Log.d("LifeCycle", "onStart")}override fun onResume() {super.onResume()Log.d("LifeCycle", "onResume")}override fun onPause() {super.onPause()Log.d("LifeCycle", "onPause")}override fun onStop() {super.onStop()Log.d("LifeCycle", "onStop")}override fun onRestart() {super.onRestart()Log.d("LifeCycle", "onRestart")}override fun onDestroy() {super.onDestroy()Log.d("LifeCycle", "onDestroy")}
}
打开 Android Studio 的 Logcat 面板,你可以看到 Activity 的生命周期变化日志。
2.5 生命周期应用场景
方法 | 实际应用场景 |
---|---|
onCreate() | 初始化变量、绑定事件、加载布局 |
onResume() | 开始动画、监听器、摄像头等资源 |
onPause() | 暂停动画、释放资源、防止泄露 |
onStop() | 保存数据状态,如保存草稿 |
onDestroy() | 彻底释放资源,如线程、数据库 |
2.6 Activity 的跳转
跳转页面使用 Intent
:
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
别忘了注册 SecondActivity:
<activity android:name=".SecondActivity" />
2.7 Activity 与 Back Stack(返回栈)
每启动一个新 Activity,系统会将它压入返回栈(Back Stack),按返回键时会依次出栈。
可以使用:
-
finish()
关闭当前 Activity -
Intent.FLAG_ACTIVITY_CLEAR_TOP
控制跳转时清空栈
2.8 小结
-
Activity 是 Android 应用中的基础组成单位
-
生命周期必须熟悉,防止内存泄露或资源浪费
-
跳转、返回等行为均受生命周期控制
-
可以通过
Log.d()
实际跟踪生命周期过程
📌 练习题
-
简述 Activity 生命周期的 7 个核心方法
-
什么情况下会触发
onRestart()
? -
如何从 A 页面跳转到 B 页面?代码示例
-
页面暂停播放音乐应该写在哪个生命周期函数中?
下一章我们将进入实战部分:
✅ 第三章:布局管理与 UI 组件详解(LinearLayout、ConstraintLayout、Button、TextView 等)
PS:兄弟们私信我说,kotlin不习惯,那么从第三章开始,我将采用java代码展示示例代码。咱就是说,主打一个宠粉~~~
习题答案
1. Activity 生命周期的 7 个核心方法
Android 的 Activity
生命周期包含以下 7 个核心回调方法,它们在不同状态下被系统调用:
-
onCreate()
:- 当 Activity 第一次创建时调用。
- 用于初始化操作,例如设置布局、绑定数据等。
-
onStart()
:- 当 Activity 即将变为可见状态时调用。
- 此时用户还不能与 Activity 交互。
-
onResume()
:- 当 Activity 获得焦点并进入前台时调用。
- 用户可以与 Activity 交互。
-
onPause()
:- 当 Activity 失去焦点但仍部分可见时调用(如弹出对话框)。
- 通常用于暂停耗资源的操作(如音乐播放)。
-
onStop()
:- 当 Activity 完全不可见时调用。
- 例如跳转到另一个 Activity 或按下 Home 键。
-
onRestart()
:- 当 Activity 从停止状态重新启动时调用。
- 在
onStart()
之前调用。
-
onDestroy()
:- 当 Activity 被销毁时调用。
- 用于释放资源或清理操作。
2. 什么情况下会触发 onRestart()
?
onRestart()
方法会在以下情况下被触发:
- 当一个处于停止状态(调用了
onStop()
)的 Activity 被重新启动时。 - 典型场景:
- 用户按下 Home 键离开应用后,又通过最近任务列表返回到该 Activity。
- 用户从其他 Activity 返回到当前 Activity。
生命周期流程为:onRestart()
→ onStart()
→ onResume()
。
3. 如何从 A 页面跳转到 B 页面?代码示例
从 A 页面跳转到 B 页面可以使用 Intent
实现。下面是代码示例:
示例代码:
// 在 A 页面中跳转到 B 页面
Intent intent = new Intent(AActivity.this, BActivity.class);
startActivity(intent);
详细步骤:
-
确保 B 页面(
BActivity
)已经在AndroidManifest.xml
中注册:<activity android:name=".BActivity" />
-
在 A 页面中,通过
Intent
指定目标 Activity,并调用startActivity()
方法完成跳转。
带参数跳转示例:
如果我们需要传递数据到 B 页面的话,可以在 Intent
中添加额外信息:
Intent intent = new Intent(AActivity.this, BActivity.class);
intent.putExtra("key", "Hello from A");
startActivity(intent);
在 B 页面中接收数据:
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_b);Intent intent = getIntent();String message = intent.getStringExtra("key");// 使用接收到的数据
}
4. 页面暂停播放音乐应该写在哪个生命周期函数中?
当页面暂停时(例如用户切换到其他页面或按下 Home 键),应该暂停播放音乐。这个操作就应该写在 onPause()
方法中。
原因:
onPause()
是在 Activity 失去焦点时调用的,此时用户可能无法与当前页面交互。- 这是最适合暂停耗资源操作(如音乐播放)的地方。
示例代码:
@Override
protected void onPause() {super.onPause();// 暂停音乐播放if (mediaPlayer != null && mediaPlayer.isPlaying()) {mediaPlayer.pause();}
}@Override
protected void onResume() {super.onResume();// 恢复音乐播放if (mediaPlayer != null && !mediaPlayer.isPlaying()) {mediaPlayer.start();}
}
注意事项:
- 如果音乐是全局播放(如后台播放),需要考虑使用
Service
来管理播放逻辑。 - 在
onDestroy()
中记得释放资源,避免内存泄漏:@Override protected void onDestroy() {super.onDestroy();if (mediaPlayer != null) {mediaPlayer.release();mediaPlayer = null;} }