Android启动模式——LaunchMode

做Android好几年了,如果刚入行的时候问我Android的启动模式有几种,各有什么区别,可能我可以回答的很流利,但是现在发现连这个基础性的问题都开始淡忘了,因此这里特别的作个记录。
Android的启动模式分四种:
1、standard:标准模式,这是Android系统默认的模式,也就是每次启动一个Activity,都会创建一个新的实例,不管这个实例是否已经存在。这种模式应该很好理解。
当我们使用Application的Context来启动一个Activity的时候,会报AndroidRuntimeException,因为standard模式下启动的Activity,会默认进入启动它的Activity的任务栈中,而非Activity类型的context却并没有所谓的任务栈,所以就会出现问题,解决这个问题的方法是需要为要启动的Activity指定标记位:FLAG_ACTIVITY_NEW_TASK,这个标记的作用是为启动的Activity创建一个新的任务栈。
2、singleTop:栈顶复用模式。这个模式简单来说就是,如果当前要启动的Activity已经位于任务栈顶,则此Activity不会重新创建,他的onCreate、onStart方法不会被调用,这时候会回调的方法是onNewIntent,我们可以在这个方法中做一些初始化的操作。如果我们要启动的Activity没有位于栈顶,那么系统还是会为我们创建一个新的实例,这时候走的就是正常的Activity的生命周期。
3、singleTask:单实例模式,也叫栈内复用模式。在这种模式下,整个任务栈中只能存在一个实例,尽管多次启动,也不会重复创建实例,同时也是onNewIntent方法被调用。除了standard,我平时用的比较多的就是singleTask了。这种模式有一个好处,就是它有clearTop的效果。比如当前栈中实例的顺序是ABCD,如果B是singleTask模式,这时候启动B,则系统会把B移到栈顶显示,同时销毁CD两个实例,只剩AB。
4、singlnstance:单实例模式。它具有singleTsk模式的所有特性,同时加强了一点,就是这种模式的Activity只能单独的位于一个任务栈中。

你可能感兴趣的:(Android启动模式——LaunchMode)