Activity生命周期以及启动模式

作者: 邢皓翔 | 来源:发表于2018-08-20 23:35 被阅读18次

此文章来自我的CSDN

今天要来谈一个android经典的话题,Activity生命周期以及启动模式,Activity我们应该不陌生,因为四大组件用的最多的就是它了,我们今天再好好的认识一下我们熟知的Activity。

Activity状态和生命周期

万事万物应该都有自己的生长规律,在程序中也是如此,我们应该首先来了解下Activity的生命周期。

说到生命周期,我们应该引用一张经典的图


aaa.png

嗯,没错就是大家经常见到的这幅图,通过此图可知,我们Activity分为四个状态。

Activity四种状态
  1. running 表示Activity处于活动状态,用户可以点击屏幕,屏幕可以做出相应,它是Activity 栈顶的一个状态

  2. paused 表示Activity失去焦点时,或者被一个透明的Activity放置栈顶,此时只是失去了与用户交互的能力,并不是销毁,这时候所有变量信息都还在。 但是有一种特殊情况,也就是内存资源非常紧张会被回收。

  3. stopped 出现在一种情况就是当一个Activity完全覆盖在此Activity时,被覆盖的Activity处于stopped,它不再是可见的。

  4. killed 表示Activity被系统回收掉了

Activity运转流程以及对应的生命周期
  • Activity启动 onCreate-> onStart -> onResume
  1. onCreate Activity启动时候,会回调此方法,我们可以在里面进行各种初始化操作。

  2. onStart Activity正在启动,但是还没有在前台显示,用户还不能与之交互。

  3. onResume 此方法调用时候,用户可以与Activity进行交互。

  • 按下Home键回到主界面(Activity不可见)-> onPause -> onStop
  1. onPause 这个方法被回调时候表示整个Activity处于停止状态
  2. onStop 表示整个Activity已经停止,已经不可见。 如果内存紧张会被回收
  • 当我们再次回到原Activity时 -> onRestart ->onStart -> onResume
  1. onRestart 表示Activity正在重新启动,此Activity从不可见状态变为可见状态。 (场景:返回桌面点击图标进入)
  2. onStart 与上面的一致
  3. onResume 与上面的一致
  • 退出当前Activity时-> onPause -> onStop -> onDestroy
  1. onPause 与上面的一致
  2. onStop 与上面的一致
  3. onDestroy 表示当前Activity正在被销毁,可以在此方法中做一些回收工作

Android任务栈

在说启动模式之前我觉得应该插播一个任务栈的概念,这样感觉有利于理解Android启动模式

T[{{~IGZ}81]Y7{)EH}3WHV.png

在Android中,任务栈其实还是一个比较重要的概念,内部不用我多说了是一个栈结构(后进先出),用这个栈来存储我们的Activity。

注意:任务栈不是唯一的,一个Activity也可以独享一个任务栈。

我们每次在打开一个新的Activity或者退出Activity时候,都会在这个栈中添加或者删除Activity,Android系统可以通过任务栈有序的管理我们的Activity。

启动模式

上部分说的是任务栈,因为任务栈关系着启动模式,所以我们开始说说启动模式

如何使用

在我们的清单文件中使用

<application>
...
    <activity android:launchMode="启动模式">
...
</application>
四种启动模式
  • standard 标准模式,如果不设置启动模式的话会自动使用此模式,使用此模式会每次创建一个Activity实例放入栈中,每次都会走新的生命周期方法。
  • singleTop 栈顶复用模式,它不是每次创建Activity都放入栈中,如果Activity会在任务栈栈顶,它不会创建新的Activity,反之还是会创建Activity,同时回调onNewIntent方法。
  • singleTask 栈内复用模式, 其实他是一个单例模式,与singleTop有些类似,只不过singleTask模式会复用栈中存在的Activity,但是在复用时候会弹出在此Activity之上的Activity,并把它们销毁。这时Activity也会调用onNewIntent方法。
  • singleInstance 此模式的Activity在整个系统中只有一个实例并且独享一个任务栈,在android中不太常用。

Activity的Flags

说完启动模式,我们要说一些与启动模式相关的Flags

  • FLAG_ACTIVITY_NEW_TASK 此标记位的作用是为Activity指定 singleTask启动模式,与xml中定义效果相同
  • FLAG_ACTIVITY_SINGLE_TOP 此标记位的作用是为Activity指定 singleTop启动模式,与xml中定义效果相同
  • FLAG_ACTIVITY_CLEAR_TOP 当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈,这个标记位一般会和singleTask启动模式一起出现,在这种情况下,被启动的Activity实例如果已经存在,那么系统就会调用它的onNewIntent方法,如果启动模式采用默认方式启动,他们它与它之上的Activity都要出栈,系统会创建新的Activity放入栈顶。 但是我们可以直接通过singleTask启动模式默认实现此标记位的效果。

这篇文章到这里就结束了,感谢大家抽出宝贵的时间来看这篇文章,如有不足,还请指出

相关文章

网友评论

    本文标题:Activity生命周期以及启动模式

    本文链接:https://www.haomeiwen.com/subject/vgbriftx.html