返回

将Activity启动模式说的明白一点

Android

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启动模式有了一个更深入的了解。在实际开发中,你可以根据自己的需要选择合适的启动模式。