android activity启动模式

activity启动模式在特定的业务场景下会使用到,而且面试的时候也喜欢问,废话不多说,用例子去实现下,新建一个android项目laucherActivity,新建几个类,如果:


activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
 >

    <Button
        android:id="@+id/btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="启动A_activity" 
        android:layout_marginTop="30dp"
        />
	<Button
        android:id="@+id/btnMain"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="启动自己" 
        android:layout_marginTop="30dp"
        android:layout_below="@id/btn"
        />
</RelativeLayout>


为了其效果明显,我们把开启的Activity加入到集合中,方便我们判断,

public class ActivityUtil {
	private static final ActivityUtil instance = new ActivityUtil();
	public List<Activity> activies = new ArrayList<Activity>();
	private ActivityUtil(){};
	
	public static ActivityUtil getInstance(){
		return instance;
		
	}
	public void add(Activity act){
		activies.add(act);
	}
}

一个简单的类在每个activity中都添加 ActivityUtil.getInstance().add(this);这句代码即可,现在每个activity节点android:launchMode没有任何配置,就是默认的启动模式,默认启动的模式是standard

主界面图:


现在点击5次启动自己的button,然后再点击activity个数:


可以看到如果activity的启动模式为standard时,启动activity,就会创建新的activity,这样如果启动过多的话,是比较占内存的,所以为什么做项目中,如果把一些不需要的界面finish(),

当我们在MainActivity中启动A_Activity 再在A_Activity中启动MainActivity再启动自己结果应该是这样的

MainActivity---->A_Activity_MainActivity_MainActivity

先跟大家说下所有的activity都是存在一个叫任务栈中,我们知道栈的结构是先进后出,如图:


这图没做好,请见谅,现在把MainActivity的启动模式配置为singleTop,现在看集合中有多少个activity

只要MainActivity在任务栈的栈顶时,再点击启动MainActivity时,并不会启动MainActivity,点击启动其他Activity都行所有singleTop启动模式就清楚了,

singleTop:当要启动的Activity在栈顶时,这个时候就不会启动此Activity,

下面看看另一个启动模式singleTask

现在是这样的,在MainActivity中启动A然后A启动B然后B启动MainActivity,算起来是启动了4个Activity,过程:

Main_A_B_Main,但是我只要点击返回键 就退出应用了,说明当要启动的Activity在栈中,会把他前面的activity都杀死,那就是为什么在B中点击启动MainActivity点击返回键就退出了应用

还有最后一种模式就是singleInstance,我们也模仿上面的行为,发现当我们点击后退键的时候,要点击三次才退出应用,说明有三个activity存在,但是我明明启动的是四个activity啊,由此发现其实在B界面中启动Main..界面时,由于MainActivity启动模式设置为了singleInstance,它会新开一个任务栈,和之前的任务栈不一样,因此之前的任务栈是保留3个activity,这就解析了为什么点击三次后退键退出应用了,




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值