android应用层-activity启动方式

Activity的启动

activity的启动可谓是老生常谈,但是面试了很多开发人员,大多还是对activity一知半解,今天就来深入讲解activity原理,有不当之处还望指正。

一:启动模式

1)standard 顾名思义(标准)就是Activity栈中不断创建新的界面,并叠加到顶部,

由于Activity栈采用LIFO(后进先出)的模式,所以,顶部界面返回时也是最先出栈的。

2)singleTop (单一顶部模式) 可以有多个实例,但相同的事例只允许一个位于顶部,

也就是用户可观察的UI。如果事例位于栈顶,则不会创建新的,而会调用其onNewIntent()方法。

3)singleTask(单一任务模式)同一个Application中只有一个实例,但是当其单例上

还有其他的Acitivity,再吊起他,会将上面的界面全部销毁掉。

4)singleInstance(单一事例模式)只有一个实例(在系统中),并且其独立运行在一个

task中,这个task只有这一个实例,不允许其他Activity存在。

单独说下应用场景

1.标准就不用说了,每次都创建,例如我们购物或者看车(App)时候,

我们想记录所有浏览过的商品(相当于历史记录,返回可以查看),

我们就可以采取standard但之前用乐视2手机时逛淘宝时,当不断刷商品,

最后没法返回最初的那个,可能也就30个Activity左右,就有点奇怪,后来发现淘宝

采用了内存处理,也就是只允许商品界面存放固定的实例,这其实降低内存消耗的举措

可以想象,如果一个用户可以无限创建商品界面实例,会是什么样的后果。

2.singleTop适合只展示一个的场景,最典型的就是推送信息,我们项目中

有一些一线快讯信息,不可能来几条,就给用户创建几个界面,用户会很反感。

3.singleTask典型程序的入口,IndexActivity主界面,只允许一个

存在,由于现有用户习惯,80%的用户使用App只访问首页,所以首页做的好不好很关键,

正是因为此,首页的内容功能往往很多,导致实例对象占用的内存也想比较大,所以采用singleTask也是比较科学的。

4.singleInstance这种应用非常少见,项目中基本也不会用到,他是一个系统的

实例,任何应用能访问他,例如一些系统级的闹钟,来电等,都是

采用此种模式,直到全部的Activity退出,不然一直在栈顶显示。


二:Activity启动流程

我也就不长篇大论了,网上这方面的资料也很多,我就简单说下流程,有兴趣的同学,

可以多搜集资料,刷机,查看frameworks里的AMS,(1W8的代码啊)

挑重点看

Launcher调用startActivity-->activity manager-->zygote(孵化) fork process-->linux fork,孵化产生一个进程,Looper,ActivityThread

发布了19 篇原创文章 · 获赞 19 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/baidu_30084597/article/details/77869521