android的四种启动模式

来源:互联网 发布:linux kill -9怎么用 编辑:程序博客网 时间:2024/06/09 04:30
(这几天发生了一些不好的事情,以至于我失去了工作,哎!到现在还没有个结果。睡也睡不着,索性就不睡了,正好把博客给补上。---闲话)

好了,言归正传。本人是培训出来的,大学专业学的动漫,一直想着振兴国家动漫,后来发现中国的人才太多了,不需要我亲自出马,哈哈哈,就跳槽来搞IT了。所以底子很差劲。一直对android的启动模式有点不清晰。所以今天就写一篇关于启动模式的文章

android的启动模式有四种,分别是 :standard(标准)singleTop(顶单例模式)singleTask (内单例模式)和 singleInstance(全局单利模式),可以在 AndroidManifest.xml 中通过给<activity>标签指定android:launchMode属性来选择启动模式。



一,standard(标准):

这个是android默认的一种启动方式,在不进行显示指定模式的情况下,所有活动都会自动使用standard模式。这种模式情况下,系统不会在乎你这个活动是否已经返回到栈中存在,因为他每一次都会创建一个新的实例;看下图





二、singleTop(顶单例模式)

好吧,看了第一种模式,你会感觉有时候不适合,因为实例明明已经在栈顶了,为什么再次启动的时候还要创建一个新的活动实例呢?好像有点多余!那就来看看singleTop模式吧。
当活动的启动模式 指定为 singleTop,在启动活动时如果发现返回栈的栈顶已经是该活动,则认为可以直接使用 它,不会再创建新的活动实例。如图所示:
1、首先现在清单文件AndroidManifest.xml中 配置一下启动模式。
2、写一个跳转,跳转到自身的Mainactivity自身
代码示意图如图:

如上图代码效果,不管你点击多少button进行跳转,他都不会在创建新的实例,因为MainActivity@422a8f38这个实例已经位于栈顶,所以不会再创建。


3、那如果跳转到另一个activity中呢?
那咱们再写一个FirstActivity,在MainActiviry跳转到FirstActivity。然后再返回到MainActivity。代码示意图如下

然后再从FirstActivity中跳回到MainActivity中

当你从MainActivity中跳转到FirstActivity中,此时MainActivity失去栈顶位置,所以根据SingleTop的属性,如果你再从FirstActivity中跳转到MainActivity中,就需要从新创建一个新的实例。(这就是SingleTop的启动模式,只要类不位于栈顶都要被重新创建)


singleTask (内单例模式)

    用过了上面的singleTop你会发现,只要不是位于栈顶还是会被反复创建,好烦啊!那咱们就继续看看SingleTask模式。(记得配置清单文件)
1、用上面一样的代码,在MainActivity中添加一个方法 onRestart()方法,在FirstActivity中添加一个 onDestroy()方法。用来区分挑战是打印的信息。如图:

2、再上图你会发现,项目启动默认会创建一个MainActivity的实例@4231cab8,当你跳转到FirstActivity类中,他又创建了FirstActivity@4233e1f0实例。这就表明栈中已经拥有了这两个类的实例。
3、再从FirstActivity中跳回到MainActivity中,你会发现他没有创建新的实例。其实他是找到了栈中已经存在的@4231cab8这个实例,并且这个实例重新回到了栈顶位置,然后就运行了onRestart()方法。接着运行onDestroy()方法销毁FitstActivity类。如果此时你点击退出,项目会自动退出程序。



四、singleInstance(全局单利模式)

其实上面三种模式是很容易理解的,而singleInstance确实最复杂的。那么咱们一步步来分析。

1、首先创建三个类,一个MainActivity,一个FirstActivity,一个TwoActivity,并Log下当前返回栈的 id。

2、給FirstActivity,指定启动模式为singleInstance。其他都不用设置启动模式,

如图:

3、当你从MainActivity中跳转到FristActivity,然后在跳转到TwoActivity中,会打印代码效果图:


4、你会发现,FirstActivity这个被特意指定启动模式为singleInstance的类,存放的栈和其他两个类的不是一个。他自己独自有一个栈。

5、当你在TwoActivity类中点击back键返回的时候,你会发现,他没有直接返回到FirstActivity,而是直接返回到了MainActivity中,再次点击back时候它才返回FirstActivity中。其实原因是因为MainActivity和TwoActivity是同一个栈,同一个栈返回完了之后才会返回其他栈的活动。当所有返回栈都空了,就是退出程序了!
6、这就是singleInstance的特性。,指定为 singleInstance模式的活动会启用一 个新的返回栈来管理这个活动。

    
 
好了,至于Android的四中启动模式就说到这里了,希望同样的小白自己用代码实现一遍。这样才能让自己更清晰的了解这些模式。不要光看!(参考书籍“第一行代码")














0 0
原创粉丝点击