Activity的四种启动模式

来源:互联网 发布:psd免费源码社区 编辑:程序博客网 时间:2024/06/06 00:23

Activity的启动模式有四种,分别是standard,singleTop,singleTask和singleInstance。
1:standard模式:
standard是Activity默认的启动模式,在不指定Activity启动模式的情况下,所有Activity使用的都是standard模式。在standard模式下,每当启动一个新的Activity,它就进入任务栈,并处于栈顶的位置,对于使用standard模式的Activity,系统不会判断该Activity在栈中是否存在,每次启动都会创建一个新的实例。
这里写图片描述
从图中可以看出,在standard启动模式下Activity01最先进栈,其次是Activity02,最后是Activity03;出栈时,Activity03最先出栈,其次是Activity02,最后是Activity01,满足“先进后出”的原则。
在Android Studio下输入代码:

public class FirstActivity extends AppCompatActivity {    private Button btnClick;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_first);        Log.d("FirstActivity",this.toString());        btnClick=(Button)findViewById(R.id.btnClick);        btnClick.setOnClickListener(new View.OnClickListener(){            @Override            public void onClick(View v) {                Intent intent=new Intent(FirstActivity.this,FirstActivity.class);                startActivity(intent);            }        });    }}

运行后
这里写图片描述
点三次TOFIRST按钮,然后发现三次才能退出。
2:singleTop模式:
当启动的Activity已经位于栈顶时,则直接使用它不创建新的实例。如果启动的Activity没有位于栈顶时,则创建一个新的实例位于栈顶。
这里写图片描述
从图中可以看出,当前栈顶的中的元素是Activity03,如果再次启动的界面还是Activity03,则复用当前栈顶的Activity实例,如果再次启动的界面没有位于栈顶,则会重新创建一个实例。
3:singleTask模式:
如果希望Activity在整个应用程序中只存在一个实例,可以使用singleTask模式,当Activity的启动模式指定为singleTask,每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现已经存在则直接使用该实例,并将当前Activity之上的所有Activity出栈,如果没有发现则创建一个新的实例。
这里写图片描述
从图中可以看出,当再次启动Activity02时,并没有新创建实例,而是将Activity03实例移除,复用Activity02实例,这就是singleTask模式,让某个Activity在当前栈中只存在一个实例。
4:singleinstance模式:
singleinstance模式加载Activity时,无论从哪个任务栈中启动该Activity,只会创建一个Activity实例,并且会使用一个全新的任务栈来装载该Activity实例。
这里写图片描述

0 0