Activity的生命周期

简介: 前言你要记得这些人,是这些温暖使你成为善良的。Activity的生命周期演示归纳起来,Activity大致会经过如下4种状态。运行状态:当前Activity位于前台,用户可见,可以获得焦点。

前言

你要记得这些人,是这些温暖使你成为善良的。

Activity的生命周期演示

归纳起来,Activity大致会经过如下4种状态。
  • 运行状态:当前Activity位于前台,用户可见,可以获得焦点。
  • 暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。
  • 停止状态:该Activity不可见,失去焦点。
  • 销毁状态:该Activity结束,或Activity所在的进程被结束。
下图显示了Activity的生命周期及相关回调方法。
img_e014932aa395653eb4b27b132aedb48b.png
activity.png
从图中可以看出,在Activity的生命周期中,如下方法会被系统回调。
  • onCreate(Bundle savedStatus):创建Activity时被回调。该方法只会被调用一次。
  • onStart():启动Activity时被回调。
  • onRestart():重新启动Activity时被回调。
  • onResume():恢复Activity时被回调。在onStart()方法后一定会回调onResume()。
  • onPause():暂停Activity时被回调。
  • onStop():停止Activity时被回调。
  • onDestroy():销毁Activity时被回调,该方法只会被调用一次。
接下来用代码来说明Activity这7个回调方法是何时被调用的。

代码示例


效果

当程序启动时将会自动启动并执行Activity,此时在LogCat窗口可以看到如下输出。
img_847d7780927371c305173d889c259864.png
activity1.PNG
当单击该程序界面上的跳转Activity的按钮时,第二个Activity进入前台,虽然第一个Activity不能获得焦点,但依然“部分可见”,此时刻Activity进入“暂停状态”。如下图
img_b7910f2f8cbb73e929292464e1d6ab8d.png
activity2.PNG
在当前状态下,按下模拟器右边的返回键,Activity再次进入运行状态。
img_d3d47fa806deeee4aa495ea5e88e3c4f.png
activity3.PNG
当点击模拟器右边的回到主界面的按键时,Activtiy将进入停止状态。
img_50a366acf0808d599b3bdb546fa3133b.png
activity4.PNG
在模拟器程序列表再次找到该程序并启动它时。
img_3a074d7ca43b9168db69b2e0d9aaa669.png
activity5.PNG
当单击程序中的退出按钮时。
img_64d37cf7fb6e031bba99bbad7acf5a19.png
activity6.PNG

Activtiy的加载模式

Android采用Task来管理多个Activity,当我们启动一个应用时,Android就会为之创建一个Task,然后启动这个应用的入口Activity。那么Activity的加载模式就负责管理实例化、加载Activity的方式,并可以控制Activity与Task之间的加载关系。下面就来详细介绍它的四种加载模式。

standard模式

标准模式,这是默认的加载模式。每次通过这种模式来启动目标Activity时,Android总会为目标Activity创建一个新的实例,并将该Activity添加到当前Task栈中——这种模式不会启动新的Task,新Activity将被添加到原有的Task中。
img_01f23d13193835fccc858d774c58797b.png
standard1.png

代码示例

public class StandardActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        LinearLayout layout = new LinearLayout(this);
        layout.setOrientation(LinearLayout.VERTICAL);
        this.setContentView(layout);
        //创建一个TextView来显示该Activity和它所在的TaskID
        TextView tv = new TextView(this);
        tv.setText("Activity为:" + this.toString() + "\n" + ",Task ID为:" + this.getTaskId());
        Button button = new Button(this);
        button.setText("启动");
        layout.addView(tv);
        layout.addView(button);

        button.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {

                Intent intent = new Intent(StandardActivity.this,StandardActivity.class);
                startActivity(intent);
            }
        });
    }
}
运行该程序,多次单击程序界面上的“启动”按钮,程序将会不断启动新的StandardActivity实例(不同Activity实例的hashCode值有差异),但它们所在的Task ID总是相同的。

singleTop模式

这种模式与standard模式基本相似,但有一点不同:当将要启动的目标Activity已经位于Task栈顶时,系统不会重新创建目标Activtiy的实例,而是直接复用已有的Activity实例。
如果将上面实例中StandardActivity的加载模式改为singleTop,(配置Activity时可指定android:launchMode属性)。那么无论用户单击多少次按钮,界面上的程序都不会有变化。
如果将要启动的目标Activity没有位于Task栈顶,此时系统会重新创建目标Activity的实例,并将它加载到Task栈顶——此时与standard模式完全相同。

singleTask模式

采用这种加载模式的Actvity在同一个Task内只有一个实例,当系统采用singleTask模式,启动目标Activity时,可分为如下三种情况。
  • 如果将要启动的目标Activity不存在,系统将会创建目标Activity的实例,并将它加入Task栈顶。
  • 如果将要启动的目标Actvity已经位于Task栈顶,此时与singleTop模式的行为相同。
  • 如果将要启动的目标Activity已经存在、但没有位于Task栈顶,系统将会把位于该Activity上面的所有Activtiy移除Task栈,从而使得目标Activtiy转入栈顶。
目录
相关文章
|
7月前
|
Java Android开发
Android四大组件之Activity组件
Android四大组件之Activity组件
|
7月前
fragment启动activity方法
fragment启动activity方法
57 1
|
XML Android开发 数据格式
Android LifeCycles之让组件感知生命周期的使用(生命周期观察者)
Android LifeCycles之让组件感知生命周期的使用(生命周期观察者)
82 0
|
调度 Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
227 0
深入剖析Android四大组件(八)——结束Activity的4个阶段(二)
Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。
Activity中,View#postDelay会导致内存泄漏,但是不会影响Activity的生命周期执行。
|
Android开发
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
深入剖析Android四大组件(八)——结束Activity的4个阶段(一)
276 0
|
Android开发
Android四大组件之一Activity的生命周期
Activity的生命周期给大家整理好了
99 0
Android四大组件之一Activity的生命周期
|
存储 Android开发
Activity的生命周期-典型情况下的生命周期
Activity的生命周期分为两部分内容,一部分是典型情况下的生命周期,另一部分是异常情况下的生命周期。所谓典型情况下的生命周期,是指在有用户参与的情况下,Activity所经过的生命周期的改变;而异常情况下的生命周期是指Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建,异常情况下的生命周期的关注点和典型情况下略有不同。
555 0
Activity的生命周期-典型情况下的生命周期
|
API Android开发
Activity的生命周期
典型情况下的生命周期分析 Activity生命周期 activity 第一次启动 : onCreate -> onStart -> onResume 用户打开新activity,原activity的过程 : onPause -> onStop.
1436 0
|
Kotlin
我们真的了解 Activity 与 Fragment 的生命周期吗?
      小菜中午和朋友闲聊,被问到 Activity 与 Fragment 的生命周期,以为是很基础的东西,基本可以把生命周期说全,但是被问到 Activity 与 Fragment 交互的生命周期运行顺序,切换 Fragment 时候的生命周期顺序,以及切换完之后退出时的生命周期...瞬间感觉基础知识太不扎实了。
1074 0