Activity之任务栈&启动模式

来源:互联网 发布:linux 类似telnet 编辑:程序博客网 时间:2024/05/18 02:21

Activity之任务栈

1.一个应用程序一般都是由多个Activity组成的。

2.任务栈(task stack,别名:back stack后退栈:按后退键就是关闭当前的Activity,相当于把任务栈的栈顶元素给移出)的作用:记录存放用户开启的Activity的先后顺序。

3.一个应用程序一被开启,系统就给他分配一个任务栈,当所有的Activity都退出的时候,任务栈就清空了。

4.任务栈的id是一个integer的数据类型,是自增长的。getTaskId()方法返回的是当前Activity所在任务栈的id。

5.在Android操作系统里面,会存在多个任务栈,一个应用程序对应一个任务栈。

6.桌面应用和一般的应用程序是一样的,任务栈的行为也是一样

7.默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,应用程序的进程还会保留


为什么要引入任务栈的概念

windows下可以通过点击任务栏切换任务

Android下长按home键切换任务

为了记录用户开启了哪些Activity,记录这些Activity开启的先后顺序,Google引入任务栈概念,帮助维护好的用户体验。

栈顶的Activity始终都是用户正在操作的Activity


桌面应用把返回键的功能给屏蔽了。只需要重写onBackPressed()方法,不让它实现父类里的方法即可,即:重写为空方法。


Activity的启动模式

启动模式也是在清单文件的activity节点下配置的:

android:launchMode="singleTop"

1.standard

默认标准的启动模式,每次startActivity都是创建一个新的Activity的实例。适用于绝大多数情况。

2.singleTop

单一顶部,如果要开启的Activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法

应用场景:浏览器书签(流氓程序员写个for循环,多次弹出是否保存该书签,若该Activity的启动模式设置为singleTop就可避免该现象。)。避免栈顶的Activity被重复的创建,解决用户体验问题。

3.singletask

单一任务栈,Activity只会在任务栈里面存在一个实例如果要激活的Activity在任务栈里面已经存在,就不会创建新的Activity,而是调用 onNewIntent() 方法复用这个已经存在的Activity,并且清空当前Activity任务栈上面所有的Activity

应用场景:浏览器Activity,整个任务栈只有一个实例,节约内存和CPU的目的。

注意:Activity还是运行在当前应用程序的任务栈里面,不会创建新的任务栈。

4.singleInstance

单一实例,整个手机操作系统里面只有一个实例存在。

不同的应用去打开这个Activity,共享、公用同一个Activity。

它会运行在自己单独、独立的任务栈里面,并且任务栈里面只有它一个实例存在。每个Activity都有自己独立的任务栈

应用场景:呼叫来电界面,InCallScreen

1 0
原创粉丝点击