将Activity启动模式说的明白一点
2023-10-12 10:08:31
Android的Activity启动模式
Android的Activity启动模式有四种:Standard、SingleTask、SingleTop和SingleInstance。每种启动模式都有自己的特点和使用场景。
Standard
Standard是默认的启动模式。在这种模式下,每次启动Activity都会创建一个新的实例。如果Activity已经存在,则不会创建新的实例,而是将Activity移动到前台。
SingleTask
SingleTask模式下,每个Activity只能有一个实例。如果Activity已经存在,则不会创建新的实例,而是将Activity移动到前台。如果Activity不存在,则会创建一个新的实例。
SingleTop
SingleTop模式下,如果Activity已经存在,则不会创建新的实例,而是将Activity移动到前台。如果Activity不存在,则会创建一个新的实例。与SingleTask不同的是,SingleTop模式下Activity可以位于栈顶也可以位于栈中。
SingleInstance
SingleInstance模式下,每个Activity只能有一个实例。如果Activity已经存在,则不会创建新的实例,而是将Activity移动到前台。如果Activity不存在,则会创建一个新的实例,并且该实例将成为新的任务的根Activity。
具体代码示例
为了更好地理解Activity的启动模式,我们来看几个具体的代码示例。
示例1:Standard
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
这段代码会创建一个新的MainActivity实例并将其启动。如果MainActivity已经存在,则不会创建新的实例,而是将MainActivity移动到前台。
示例2:SingleTask
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TASK);
startActivity(intent);
这段代码会创建一个新的MainActivity实例并将其启动。如果MainActivity已经存在,则不会创建新的实例,而是将MainActivity移动到前台。
示例3:SingleTop
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
这段代码会创建一个新的MainActivity实例并将其启动。如果MainActivity已经存在,则不会创建新的实例,而是将MainActivity移动到前台。与示例2不同的是,示例3中的MainActivity可以位于栈顶也可以位于栈中。
示例4:SingleInstance
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_INSTANCE);
startActivity(intent);
这段代码会创建一个新的MainActivity实例并将其启动。如果MainActivity已经存在,则不会创建新的实例,而是将MainActivity移动到前台。如果MainActivity不存在,则会创建一个新的实例,并且该实例将成为新的任务的根Activity。
结语
通过上面的代码示例,相信你已经对Android的Activity启动模式有了一个更深入的了解。在实际开发中,你可以根据自己的需要选择合适的启动模式。