Activity的四种启动模式

来源:互联网 发布:阿里云与阿里巴巴 编辑:程序博客网 时间:2024/06/07 03:15

前言

我们都知道,android内部是通过回退栈来管理activity的,既然是通过栈来管理,那么activity就能够巧妙的利用栈来做一些事情,例如activity的四种启动模式,都是和activity栈有关系的。

Activity的四种启动模式

在一些特殊的情况下,我们可能对activity的实例做一些特殊的处理,可能要求整个应用只有一个activity,android系统为我们提供了这些功能,只要在android的清单文件中注册activity时设置它的启动模式即可。

  1. 标准启动模式(standard):
    这是activity的标准启动模式,activity默认以这种方式启动,这种模式下activity可以被多次实例化。也就是说同一个任务栈里可以有多个相同的该activity实例。例如:在ActivityA启动ActivityA则会创建一个新的activity对象,也就是任务栈里此时会有两个ActivityA,点击回退按钮上面的activityA出栈,下面的仍然是ActivityA。

  2. 栈顶复用模式(singleTop):
    如果activity的实例已经存在与栈顶,那么当再启动一个相同的activity时,会复用这个activity实例而不会新创建一个activity,并且会调用该实例的onNewIntent()方法将intent对象传递到这个实例中。例如:ActivityA在栈顶,调用startActivity来启动一个新的ActivityA,则仍然使用这个activity,界面不会有任何变化,如果ActivityA不在栈顶,则会新建一个实例ActivityA。

  3. 栈内复用模式(singleTask):
    如果一个activity设置了这种启动模式,那么在一个任务栈中只能有一个该activity的实例,如果任务栈中还没有该activity,会新创建一个并放在栈顶,如果已经存在activity,系统会销毁在该activity上所有的activity,最终让该activity位于栈顶,同事回调该activity的onNewIntent()方法。

  4. 单例模式(singleInstance):
    如果一个activity设置了该种模式,那么该activity会在一个独立的任务中开启,并且这个任务只有一个实例,被该实例启动的其它activity会自动运行在另一任务中。当再次启动该activity实例时,会重用已存在的任务和实例,并且调用该实例的onNewIntent()方法将intent对象传递到该实例中。

结语

和singleTask不同的是:同一时刻系统中只会存在一个这样的activity实例,而singleTask可以有多个实例,只要在不同的任务栈中即可,比如应用a,b分别启动singleTask模式的该activity,那么a和b中都会存在一个这样的实例,因为应用a,b都分别有自己的activity任务栈。