Activity 是Android 用户界面的基础组件,它一般存放在任务栈(Task)中, 所以Activity是以栈的形式存放的,也就遵循先进后出的原则,也不支持重新排序。如果要改变Activtiy的顺序,只能根据压栈和出栈的操作来改变。
当启动一个Application时,系统会默认创建一个对应的Task,用来存放根Activity。新启动的Activity 中,如果affinity属性相同,这些新启动的Activity就是存放在同一个Task里面。
由于栈是一个先进后出的线性表,Activity在当前栈中的位置,就决定了Activity的状态。但是往往在开发过程中,为了简化一些流程,增强用户的体现。会启动栈中任一位置的一个Activity。通过在AndroidManifest文件中的属性android:launchMode来设置或者通过Intent的flag来设置。
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信息,并可以进行实际的操作。
标签:生命周期,启动,创建,及其,模式,Task,实例,Activity From: https://www.cnblogs.com/xiaocai84/p/17593125.html