Activity及其生命周期

发布时间 2023-07-31 12:19:24作者: Alpha_To_Beta

  Activity 是Android 用户界面的基础组件,它一般存放在任务栈(Task)中,  所以Activity是以栈的形式存放的,也就遵循先进后出的原则,也不支持重新排序。如果要改变Activtiy的顺序,只能根据压栈和出栈的操作来改变。

  当启动一个Application时,系统会默认创建一个对应的Task,用来存放根Activity。新启动的Activity 中,如果affinity属性相同,这些新启动的Activity就是存放在同一个Task里面。

  由于栈是一个先进后出的线性表,Activity在当前栈中的位置,就决定了Activity的状态。但是往往在开发过程中,为了简化一些流程,增强用户的体现。会启动栈中任一位置的一个Activity。通过在AndroidManifest文件中的属性android:launchMode来设置或者通过Intentflag来设置。

  standard    【默认模式】    可以有多个相同的实例,也允许多个相同Activity叠加,绝大多数的Activity都是使用这个模式。

  singleTop   【栈顶复用模式】    如果要开启的Activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用onNewIntent() 方法。如果不位于栈顶,就会创建新的实例,避免栈顶的Activity被重复的创建。 一般在通知栏点击收到通知后,需要启动一个Activity会使用到这个模式。可以避免多次点击启动多个Activity的情况。

  singleTask  【栈内复用模式 】   Activity只会在一个任务栈里面存在一个实例。如果要激活的Activity,在任务栈里面已经存在,就不会创建新的Activity,而是复用这个已经存在的Activity,调用onNewIntent() 方法,并且清空这个Activity任务栈上面所有的Activity。 一般App的主页会使用这个模式。 这个模式能保证在用户退出应用时所有的Activity都能销毁。

  singleInstance   【单一实例模式】   整个手机操作系统里面只有一个实例存在。在该模式下,我们会为目标Activity分配一个新的affinity,并创建一个新的Task栈,并且任务栈里面只有他一个实例存在。不同的应用去打开这个Activity共享公用的同一个Activity。 这个模式启动时会比较慢,切换效果不好,用户体现差。一般用于多个Appliation之间。  任何一个Activity 它都会有一个生命周期,包括 onCreate() (创建)、onStart()(已开始)、onResume()(已恢复)、onPause()(已离开)、onStop()(已停止)、onDestroy()(释放回调)

   应用与用户交互的状态是onResume() 已恢复状态,此状态用户可以在屏幕上看到显示的UI信息,并可以进行实际的操作。