一、启动模式介绍
首先,要了解Activity的启动流程,必须先了解Activity的启动模式。Android提供了四种启动模式:standard、singleTop、singleTask和singleInstance。
standard是默认的启动模式,每次启动该Activity都会在任务栈中创建一个新的实例。
singleTop是指如果该Activity在栈顶,那么不会创建一个新的实例,而是复用已经存在的Activity。如果不在栈顶,则会创建一个新的Activity实例。
singleTask是指如果该Activity已经存在于栈中,那么不会再创建一个新的实例,而是将所有在该Activity实例上面的实例全部出栈,然后再调用该Activity的onNewIntent()方法传递一个新的Intent。如果该Activity不在栈中,则会创建一个新实例。
singleInstance是指该Activity独立于其他任务栈,如果该Activity不存在,则会创建一个新实例,创建的实例独立于其他任务栈,如果存在,则会直接调用该Activity的onNewIntent()方法传递一个新的Intent,而不会创建新实例。
二、Intent启动Activity
在Android中,使用Intent启动Activity是最常见的方法,可以通过Intent传递参数、设置标志位和启动模式等。
示例代码如下:
Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("name", "小明"); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
上述代码中,首先创建了一个Intent对象并指定要启动的Activity,通过putExtra()方法传递参数,使用setFlags()方法设置标志位,最后调用startActivity()方法启动Activity。
三、启动模式在AndroidManifest中的配置
启动模式可以通过在AndroidManifest.xml中的Activity标签下进行配置。
示例代码如下:
上述代码中,通过在Activity标签下设置android:launchMode属性即可指定该Activity的启动模式。
四、TaskAffinity属性
在Android中,每个任务栈都有一个任务栈名称,称为TaskAffinity,如果两个Activity具有相同的TaskAffinity,则它们会被创建在同一个任务栈中,如果不同,则会创建在不同的任务栈中。
Activity的TaskAffinity属性可以通过在AndroidManifest.xml中的Activity标签下进行配置。
示例代码如下:
上述代码中,通过设置android:taskAffinity属性,指定了该Activity的TaskAffinity为com.example.task1。
五、FLAG_ACTIVITY_CLEAR_TOP标志位
在使用Intent启动Activity时,可以使用FLAG_ACTIVITY_CLEAR_TOP标志位,该标志位会将栈顶的Activity实例以上的所有Activity实例全部出栈,然后再将该Activity实例置于栈顶。
示例代码如下:
Intent intent = new Intent(this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent);
上述代码中,通过addFlags()方法设置FLAG_ACTIVITY_CLEAR_TOP标志位后启动Activity,该标志位会将SecondActivity之前的Activity全部出栈,使得SecondActivity处于栈顶。
六、总结
Android的启动模式非常灵活,可以根据实际需要进行配置和使用。通过合理的配置启动模式和标志位,可以实现对Activity启动流程的精细控制。