在Android应用开发中,`Activity`是用户界面的基本单元,而`launchMode`是每个`Activity`在AndroidManifest.xml文件中可配置的一个重要属性。它决定了`Activity`如何被启动和在任务栈中的行为,对应用的流程控制起着关键作用。`launchMode`有四种主要模式:`standard`、`singleTop`、`singleTask`和`singleInstance`。
1. **standard(默认模式)**
这是最常见的`launchMode`,每次启动`Activity`时都会创建一个新的实例。如果当前任务栈中已经有该`Activity`的实例,那么会再创建一个并压入栈顶。这种模式适用于大多数`Activity`,因为它允许多次实例化。
2. **singleTop**
当`Activity`设置为`singleTop`时,如果启动请求的目标`Activity`已经在栈顶,那么就不会创建新的实例,而是重用已有的。这通常用于当一个通知或者广播需要唤醒`Activity`,但不希望创建多个实例的情况。
3. **singleTask**
`singleTask`模式下,`Activity`总是作为新任务的根`Activity`或者在当前任务栈中唯一存在。如果栈中已有该`Activity`,则会将该`Activity`及其以上的所有`Activity`出栈,然后将新的启动请求放入栈顶。常用于主界面或者需要独立任务的`Activity`。
4. **singleInstance**
这是最严格的单例模式,`Activity`不仅在自己的任务栈中唯一,而且还会创建一个全新的任务栈来放置这个`Activity`。这样,任何试图启动此`Activity`的请求都将在这个独立的任务栈中进行,即使是在同一个应用内,也不会与其他`Activity`共享任务栈。
理解`launchMode`对于优化应用的启动流程、避免内存泄漏以及提供良好的用户体验至关重要。例如,如果你的`Activity`需要在用户返回时保持状态,可能需要选择`singleTask`或`singleInstance`;如果希望每次启动都是全新的`Activity`,则选择`standard`。
在实际开发中,合理地运用`launchMode`可以减少不必要的`Activity`实例,提高应用性能。同时,配合`FLAG_ACTIVITY_*`系列的标志位,可以实现更多复杂的行为控制,如`FLAG_ACTIVITY_CLEAR_TOP`用于清除栈中到目标`Activity`的所有`Activity`,`FLAG_ACTIVITY_NEW_TASK`则用于在新的任务栈中启动`Activity`等。
通过阅读博客文章《Activity的launchMode》(链接:https://zxl-ong.iteye.com/blog/875779),开发者可以深入理解这些模式的工作原理,并根据实际需求灵活应用。记住,正确配置`Activity`的`launchMode`是提升应用质量的重要步骤。