对于启动程序过程源码分析

在android 系统中,应用程序是由lanucher启动起来的,其实lanucher 本身就是一个应用程序,手机上的桌面上的图标就是 启动lanucher的入口。清单文件里面:


这里的intent信息包括:action="android.intent.action.Main",category="android.intent.category.LAuncher"表示他要启动maintvuvuty,简单的来说 一个task(任务栈)是一个activity的集合  就只是理解到这里 入口是launcher。

下面看 启动模式

1.程序打开时就创建一个任务栈,哟on关于存储当前程序的activity,所有的activity属于一个任务栈

2.一个任务栈包含的一个activity的集合,去有序的选择那一个activity与用户进行交互,只有处在站定的avtivity才可以跟用户进行交互

3.任务栈可以移动到后台,并且保留了每一个activity的状态,并且有序的给用户列出他们的任务,而且不丢失状态(当activity不存在的时候能够保存信息)。

4.退出应用时,当所有的任务栈中的所有activity清除出栈时,任务栈会被销毁,程序退出

任务栈的缺点:

1.每一次开启页面的时候,都会给任务栈添加一个acvtivity 而且之后任务栈中的activity全部清除出栈时,任务栈被销毁程序才会退出,这样就造成了用户体验差 ,多次返回才可以退出程序

2.每一次加载activity的时候都会向任务栈中添加 重复数据太多,会导致内存溢出(oom);

启动方式:

standard   每启动一个activity就会创建一个activity的实例 

singleTop 在栈顶启动一个activity 如果 处于栈顶位置,那么也会创建一个 实例 只有栈顶的时候才不会创建

singleTask 启动activity时,如果存在 实例 那么就把它置于栈顶不会创建新的实例,不存在则创建

singleInstance 这种启动模式比较特殊,启动一个,就会创建一个新的栈并将activity置于其中,保证其他activity不会进入(单例模式)。

栈与队列是两种操作受限的线性表

(线性表:线性表是一种线性结构,他会死一个含有n>=0个借点的有限序列,同一个线性表中的数据元素数据类型相同并且满足一对一的逻辑关系)(这个没怎么明白)

栈与队列的相同点

1.都是线性结构

2.插入操作都是限定在表尾进行

3.都可以通过顺序结构进行链式结构实现

4.插入与删除的时间复杂度都是0(1),在空间复杂度上两者也是一样的

5.多链栈和多链队的管理模式可以相同。

栈与队列的不同点:

1.删除数据元素的位置不同,栈的删除操作在表尾基尼系那个,队列的删除操作在表头进行

2.应用场景不同;常见栈的应用场景包括括号问题的求解,表达式的转换和求值,函数调用和递归实现,深度优先搜索遍历等;常见的队列的应用场景包括计算机系统中各种资源的管理,消息缓冲器的管理和广度优先搜索遍历等。

3.顺序栈能够实现多栈空间共享,而顺序队列不能


猜你喜欢

转载自blog.csdn.net/god_sunht/article/details/79343096