作者:十一 | 来源:互联网 | 2024-09-29 16:20
对Android的启动模式不是很了解,这里记录下简单的理解内容以便日后查看。 Androi的四种启动模式分别为:standard,singleTop,singleTask,sing
对Android的启动模式不是很了解,这里记录下简单的理解内容以便日后查看。
Androi的四种启动模式分别为:standard,singleTop,singleTask,singleInstance。为Activity指定启动模式有两种方法,第一种是通过AndroidManifest.xml中为Activity指定添加launchMode
第二种就是通过Intent来设置标志位来指定Activity的启动模式,两者有区别,优先级上是第二种高于第一种。
standard是系统默认的启动模式,也就是说设不设置launchMode都是标准模式,每次启动一个Activity都会重新创建一个新的实例,如有个Activity为A跳转本身时,A->A1->A2,都会产生新的界面,当按back键时后退顺序为A2->A1->A,依次退出。
singleTop与设置标记位FLAG_ACTIVITY_SINGLE_TOP效果相同,当该实例位于栈顶时就不再创建同时onNewIntent方法会被回调,在此方法中可以得到回调信息,如Activity A跳转本身,点击多次都不再跳转新的界面,但是当A->B->A1时,A不在栈顶产生新的实例A1,退出时A1->B->A。
singleTask与设置标记位FLAG_ACTIVITY_NEW_TASK效果相同,与singleTop一样系统会回调其onNewIntent方法,当跳转本身时不会再产生新实例,如果已有实例会把其调到栈顶,如果没有则会创建并压入栈中,如A->B->C->A,A为singleTask如果此时退出则直接退到桌面,因在A实例已存在把其调到栈顶时会把栈内A上面的BC全部出栈,如A->B->C,退出时C->B->A。
singleInstance比较复杂其拥有singleTask的特性又加强了一点,具有此种模式的Activity只能单独的位于一个栈内。当跳转本身时也不会再产生新的实例,当A->B->C->B,此时B为singleInstance模式,退出时为B->C->A,当A->B->C,退出为C->A->B,因此时B在一个栈内,A与C在另一个栈内,一个栈内退出后再退另一个栈。