Activity的生命周期和启动模式

本文详细介绍了Android中Activity的生命周期及其回调方法,包括onCreate、onStart、onRestart、onResume、onPause、onStop和onDestroy等,并解释了它们之间的关系。此外,还深入探讨了Activity的四种启动模式:standard、singleTop、singleTask和singleInstance。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的生命周期和启动模式详解

  前言
  Activity是Android四大组件之首,使用也最为频繁,翻译过来就是“活动”,也就是Android应用中一个个我们可见的页面。
  1.1 Activity的生命周期全面解析

Activity的生命周期切换图

(1)onCreate——Activity被创建

做一些初始化工作,例如setContentView去加载界面布局,初始化数据等。

(2)onStart——Activity被启动

Activity已经可见,但还不能与用户交互。

(3)onRestart——Activity被重新启动

一般由不可见状态重新变成可见状态,onRestart方法就被调用。

(4)onResume——Activity可见并且可以交互

onStart可见其实Activity还在后台,其实还无法真实看到;onResume的时候Activity才显示到前台,我们才真实可见。

(5)onPause——Activity正在停止

正常情况下会紧接着调用onStop,此时可以做一些存储数据、停止动画等工作,注意不能太耗时。

(6)onStop——Activity即将停止

可以做一些稍微重量级的回收工作,同样不能太耗时。

(7)onDestory——Activity即将被销毁

这是Activity生命周期的最后一个回调,我们可以做一些回收工作和最终资源的释放。

补充说明:

(1)针对一个特定的Activity,第一次启动时的回调为:onCreate -> onStart -> onReasume

(2)当用户打开新的Activity或者切换到桌面的时候,回调为:onPause -> onStop;有一种特殊的情况,如果新打开的Activity采用了透明主题,那么当前的Activity就不会调用onStop

(3)当用户再次回到原Activity时,回调为:onResatrt -> onStart -> onReasume

(4)当用户按Back键回退时,回调为:onPause -> onStop -> onDestory

(5)当Activity被系统回收后再次打开,生命周期方法回调和(1)一样,注意只是生命周期方法一样,不代表所有的过程都一样。

(6)从整个生命周期来说,onCreate 和 onDestory是配对的,分别标识着Activity的创建和销毁,并且只会有一次调用。从Activity是否可见来说,onStart 和 onStop是配对的,随着用户的操作或者设备的屏幕点亮和熄灭,这两个方法可能被多次调用;从Activity是否在前台来说,onReasume 和 onPause是配对的,也会随着用户的操作或者设备的屏幕点亮和熄灭被多次调用。

注意:

1、onStart, onStop 和 onResume, onPause本质上没有太大区别;onStart, onStop是从Activity是否可见这个角度决定是否回调的,而onResume, onPause是从Activity是否位于前台这个角度来回调的。

2、当新启动一个Activity的时候,旧Activity的onPause方法会被先调用,然后才会启动新的Activity。

11-03 12:18:41.334 22730-22730/com.glp.activitychange D/MainActivity: onCreate
11-03 12:18:41.464 22730-22730/com.glp.activitychange D/MainActivity: onStart
11-03 12:18:41.464 22730-22730/com.glp.activitychange D/MainActivity: onResume
11-03 12:18:43.944 22730-22730/com.glp.activitychange D/MainActivity: onPause
11-03 12:18:43.994 22730-22730/com.glp.activitychange D/SecondActivity: onCreate
11-03 12:18:44.014 22730-22730/com.glp.activitychange D/SecondActivity: onStart
11-03 12:18:44.014 22730-22730/com.glp.activitychange D/SecondActivity: onResume
11-03 12:18:44.464 22730-22730/com.glp.activitychange D/MainActivity: onStop

代码示例:https://github.com/guolipeng1993/ActivityChange (Android Studio项目)

  1.2 Activity的启动模式(LaunchMode)

(1)四种启动模式

standard:标准模式
系统默认模式,每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。

singleTop:栈顶复用模式
在这种模式下,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,而是调用onNewIntent方法,通过此方法的参数读取当前请求的信息。

singleTask:栈内复用模式
在这种模式下,只要Activity在一个栈内存在,那么多次启动此Activity都不会重新创建实例,而是和singTop一样,系统调用onNewIntent方法,但singleTask默认具有clearTop的效果,如果栈内已经存在新Activity的实例,则会将该实例上面的所有Activity全部移出栈,使新Activity的实例位于栈顶位置。

singleInstance:单实例模式
在该模式下,新Activity会单独开启一个任务栈来存放实例对象。

(2)指定启动模式
a: 通过 AndroidManifest.xml 指定

<activity android:name=".MainActivity"
          android:launchMode="singleTop"/>

b: 通过在Intent中设置标志来指定

Intent intent = new Intent(this,SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

本人能力有限,如果此博文中有哪里讲得让人难以理解,欢迎留言交流,若有讲解错的地方欢迎指出,大家互相学期,共同进步!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值