复习Android之Activity的爱恨情仇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/github_34402358/article/details/88168795

Activity的爱恨情仇

  1. Activity的本质是什么?

  2. Activity的生命周期怎样进行的?

  3. Activity的启动模式有哪些?

    首先,介绍Activity的本质是什么?
    Activity是Android的四大组件之一,Activity显示界面的载体,用户通过Activity进行交互一系列相关操作。
    其次,我们介绍Activity的生命周期
    如图:

在这里插入图片描述

Activity正常的生命周期
onCreate()
此方法表示Activity正在被创建,这是Activity的第一个生命周期。此时我们可以做一些初始化工作,比如:加载布局,初始化界面数据。
onRestart()
此方法表示Activity正在重新启动。一般情况下,当前Activity是从不可见变为可见的,onRestart被调用,一般情况是用户行为所引起的,比如:用户按下Home键切换到桌面或者用户打开一个新的Activity,这是当前Activity就会暂停,也就是onResume和onStop被执行,接着用户返回这个Activity,就会出现这个问题。
onStart()
此方法表示Activity正在被启动,这是Activity已经可见了。但是并没有出现在前台,还无法和用户进行交互。可以理解为Activity已经显示,但是我们看不见。
onResume()
此方法表示Activity已经可见,并且出现在前台并开始活动,此时可以与用户进行交互。此时的活动一定谓语返回栈的栈顶,并且处于运行状态。要注意onResume和onStart的对比,onStart和onResume都表示Activity可见,但是onStart表示Activity还在后台,onResume的时候Activity才显示在前台。
onPause()
此方法表示Activity正在停止,正常情况下,紧接着onStop就会被调用。在特殊情况下,这时候快速返回这个Activity界面,那么onResume会被调用,这种情况属于极端情况,用户很难复现。此时可以做一些不太耗时的操作,比如:停止动画,存储数据等等,如果做一些耗时操作,就会影响新的Activity的显示,onPause必须停止,新的Activity的onResume才会被调用。
onStop()
此方法表示Activity即将停止,在Activity完全不可见的时候调用。它和onPause方法的主要区别在于,如果此时启动一个对话框,那么onPause就会被调用,而onStop并不会执行,可以做一些稍微重量级的回收工作,同时不能太耗时。
onDestroy()
此方法表示Activity即将被销毁,这是Activity的生命周期最后一个方法。在这里我们可以做一些资源释放和回收工作。

Activity生命周期的切换过程分如下几种情况

  1. 特定的Activity,第一次启动,方法如此走:onCreate->onStart->onResume
  2. 当用户打开一个新的Activity或者切换到桌面的时候,方法如此走:onPause->onStop。当Activity采用透明主题这种特殊情况时,那么当前Activity不会走onStop。
  3. 当用户在此回到原Activity时,方法如此走:onRestart->onStart->onResume。
  4. 当用户按back键时,方法如此走:onPause->onStop->onDestroy。
  5. 从整个Activity的生命周期来说,onCreate和onDestroy时配对的,分别代表着Activity的创建和销毁,并且只可能有一次调用。从Activity是否可见来说,onStart和onStop时配对的,随着用户的操作和屏幕的点亮和熄灭,这两个方法可能会被调用多次;从Activity是否在前台来说,onResume和onPause是配对的,随着用户的操作和屏幕的点亮和熄灭,这两个方法可能会被调用多次。

最后介绍,Activity的启动模式有哪些?
Activity的四种启动模式分别为:standard、singleTop、singleTask、singleInstance
在android中有两种配置方式:

  1. 清单文件中的Activity配置使用:android:launchMode=""属性指定启动模式。
  2. Intent intent = new Intent(this, MainActivity.class);
    //相当于singleTask
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);
    FLAG_ACTIVITY_NEW_TASK相当于singleTask
    下边说一下每一种启动模式所代表的意思
    1>、standard:默认模式,每次启动都会创建一个新的Activity对象,放到目标任务栈的栈顶
    2>、singleTop:判断当前的任务栈顶是否存在相同的Activity,如果存在,直接使用,如果不存在,创建一个新的Activity对象放入栈顶
    3>、singleTask:在任务栈中判断是否存在相同的Activity,如果存在,那么会清楚该Activity之上的所有Activity对象显示,
    如果不存在,创建一个新的Activity对象放入栈顶
    4>、singleInstance:会在一个新的任务栈中创建Activity,并且该任务栈中只允许存在一个Activity实例

猜你喜欢

转载自blog.csdn.net/github_34402358/article/details/88168795