活动的启动模式

来源:互联网 发布:一搜影咖软件 编辑:程序博客网 时间:2024/05/16 01:46
活动的启动模式一共分为四种,分别是standard、singleTop、singleTask、singleInstance,在AndroidManifest.xml中通过给标签指定android:launchMode属性来选择启动模式。
1.standard
这个是活动默认的启动的模式,Android是使用返回栈来管理活动的,每启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于此模式,系统不会在乎这个活动是否已经存在在返回栈中,每次启动都会创建该活动的一个新的实例。
首先来建立一个例子,在FirstActivity中弄一个按钮,用intent就开启FirstActivity.
活动的启动模式
      结果:
活动的启动模式
从打印结果来看,每一次点击按钮,就会创建一个新的FirstActivity实例,返回栈中也存在3个FirstActivity实例,所以要连续点击三次Back才能退出程序。

2.singleTop
当活动使用singleTop模式的时候,在启动模式如果发现返回栈顶已经是该活动,则认为直接使用它,不会再创建新的活动实例。
首先修改刚刚的实例的AndroidManifest.xml中的FirstActivtiy的启动模式为singleTop,再运行同样的程序。观察结果。
活动的启动模式
活动的启动模式
发现不管点击多少次,都不会有新的打印信息,因为FirstActivity已经在栈顶了,可是现在新建一个SecondActivity,改动FirstActivity,用FirstActivity先启动SecondActivity,在SecondActivity中启动FirstActivity,看结果,我这里用w打印出来的消息。
活动的启动模式
发现一个新的FirstActivity启动起来了,这是因为这个时候FirstActivity已经不在栈顶的原因。

3.singleTask
使用singleTop模式能很好的解决重复创建栈顶活动的问题,可是如果该活动没有在栈顶,还是可能创建多个活动实例的。当活动的启动模式指定为singleTask,每次启动该活动,系统就会在返回栈中检查是否存在该活动的实例,若发现已经存在则直接使用该实例,并且!把在这活动之上的所有活动全部弄出栈,当然没有发现就会创建一个新的活动实例了。
还是上面的例子,把FirstActivity的启动模式改为singleTask.
活动的启动模式
然后在FirstActivity中添加onRestart()方法,在SecondActivity中添加onDestroy()方法
活动的启动模式
活动的启动模式
然后运行程序,在FirstActivity中点击进入SecondActivity,然后在SecondActivity界面点击,又重新回到FirstActivity。结果:
活动的启动模式
从打印结果就能看出来,从SecondActivity启动FirstActivity会系统会发现已经存在了FirstActivity实例了,而且在SecondActivity下面,于是SecondActivity会从返回栈中出来,然后FirstActivity重新成为了栈顶活动。现在返回栈中只有FirstActivity一个实例了,按一下Back键就可以退出程序。

4.singleInstance
这个模式的活动会启用一个新的返回栈来管理这个活动,这能解决共享活动实例的问题,以前做过一个项目,中间有个程序锁功能,而这个程序锁的活动,就是使用此启动模式来实现的。
现在我们将SecondActivity的启动模式来改为singleInstance
活动的启动模式
然后修改FirstActivity中的onCreate()方法,在onCreate()方法中打印出当前的返回栈的id
活动的启动模式

然后再修改SecondActivity中onCreate()方法,同样打印当前返回栈的id,修改点击事件,启动ThirdActivity
活动的启动模式
ThirdActivity的onCreate()方法中打印当前的返回栈id
活动的启动模式
     结果:
活动的启动模式
可以看到SecondActivity的Task id不同于FirstActivity和ThirdActivity,说明SecondActivity确实是存在一个单独的返回栈中的,而且这个栈只有SecondActivity一个活动。然后按返回键,会发现从ThirdActivity直接跳到FirstActivity,再按返回键跳到SecondActivity,最后按下才退出程序。

0 0
原创粉丝点击