目的:学习acticvity的启动方式,熟悉其特点以及指定桟的方式
四种模式:
1。standard
activity的默认启动方式。每启动一个activity就会在桟顶创建一个新的实例,无论这个实例是否存在。但是,当activity已经位于桟顶,再次启动activity时还需重新创建实例,不能直接复用。
2。singleTask
使activity在整个程序中只有一个实例。每次启动activity先检测桟中是否已存在实例,若存在,则直接复用,并将当前activity上的所有实例出桟销毁。
生命周期:同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法。
3。singleTop
判断当前activity是否位于桟顶,若在,则直接复用 (情况一),若不在,则重新创建实例(情况二)。
生命周期:若情况一中栈顶的Activity被直接复用时,它的onCreate、onStart不会被系统调用,由于它并没有发生改变。可是一个新的方法 onNewIntent会被回调(Activity被正常创建时不会回调此方法)。
4。singleInstance
启动一个新的任务桟来管理activity实例,在整个系统中只存在一个实例,无论从哪个任务桟中启动该activity,都会使该activity的任务桟提到前台,从而使activity显示。只要作用是在不同的程序中共享一个activity实例。在一般应用中用不上
使用方式:
1. 在 Manifest.xml中指定Activity启动模式
一种静态的指定方法,在Manifest.xml文件里声明Activity的同一时候指定它的启动模式,这样在代码中跳转时会依照指定的模式来创建Activity。样例例如以下:
<activity android:name="..activity.MultiportActivity" android:launchMode="singleTask"/>
2. 启动Activity时。在Intent中指定启动模式去创建Activity
一种动态的启动模式,在new 一个Intent后,通过Intent的addFlags方法去动态指定一个启动模式。样例例如以下:
Intent intent = new Intent();
intent.setClass(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
注意:
(1)优先级:动态指定方式即另外一种比第一种优先级要高,若两者同一时候存在,以另外一种方式为准。
(2)限定范围:第一种方式无法为Activity直接指定 FLAG_ACTIVITY_CLEAR_TOP 标识,另外一种方式无法为Activity指定 singleInstance 模式。