Application、Activity Stack 和 Task的区别

学习Android,了解一些基本概念将有助更深入的去学习和理解Android。在这里,所要讲诉的是Android里三个比较基础的概念:Android  Application、Activity Stack 和 Task。

  1. 什么是Android Application?

  Android Application就是一个android应用程序。 简单的理解就是一个apk就是一个Android Application。例如Android平台下自带的应用程序:Browser、Contacts、camera等。

  每一个Application都是由Activity、Service、content Provider和Broadcast Receiver等Android的基本组件所组成,其中Activity是实现应用程序的主体,它承担了大量的显示和交互工作,甚至可以理解为一个界面 就是一个Activity。

  2. 什么是Activity Stack?

  如上所诉,Activity承担了大量的显示和交互工作,从某种角度上将,我们看见的应用程序就是许多个Activity的组合。为了让这许多 Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈 顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity,这也是符合逻辑的。

  在操作应用程序时,每次启动新的Activity,都会将此压入Activity Stack,当用户执行返回操作时,移除Activity Stack顶上的Activity,这样就实现了返回上一个Activty的功能。直到用户一直返回到Home Screen,这时候可以理解为移除了Activity Stack所有的Activity,这个Activity Stack不再存在,应用程序也结束了运行。

  3. 什么是Task?

  Task是指将相关的Activity组合到一起,以Activity Stack的方式进行管理。从用户体验上讲,一个“应用程序”就是一个Task,但是从根本上讲,一个Task是可以有一个或多个Android Application组成的。例如:你想在发送短信时,拍一张照并作为彩信发出去,这时你首先停留在短信应用程序的的Acitivity上,然后跳转到 Camera应用程序的Activity上,当完成拍照功能后,再返回到短信应用程序的Activity。这实际上是两个Android Application协同合作后完成的工作,但为了更好的用户体验,Android平台加入了Task这么一种机制,让用户没有感觉到应用的中断,让用 户感觉在一“应用程序”里就完成了想完成的工作。




消息讲解  Android  标准模式的 Activity和SingleInstance模式的Acitivity的运行流程

Android采用Task来管理多个Activity,当我们启动一个应用程序时,Android为程序创建了一个Task;
Activity的加载模式,就负责管理实例化、加载Activity的方式、并可以控制Activity与Task之间的加载关系;
四种模式:
1, Standard模式  这是默认的模式, Activity_standard 工程主要介绍着这种模式的特点 :
不会启动新的Task,Android为目标Activity创建一个新的实例,并加入当前的Task中;
现象:
每次重复启动MainActivity时,MainActivity都有新的哈希值,说明每次的MainActivity实例都是重新创建的,
并且TaskId都是一样的,说明所有MainActivity实例会添加到原来的Task中
问题:不能使用XML中的布局要用java代码写自己的布局
2,singleTop模式, 
特点:当将要被启动的Activity位于栈顶时,系统不会创建新的目标Activity的实例;
如果目标Activity没有位于栈顶,此时系统会重新创建目标Activity实例,加载到Task的栈顶;
3, singleTask模式,
特点:采用这种加载模式的Activity在同一个栈中只有一个实例;
当系统采用singleTask模式启动目标Actiivty时的现象:
1,目标:对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动;

对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动;


图片过大 无法上传,需要请留言

******************************************************  思 维 误 区  ******************************************************

 小编 在一次做项目时, 误以为Activity栈和Task是一会事,导致问题无法解决,在此记录他们的概念。








更多相关文章

  1. 2、创建android应用程序
  2. Android四种Activity的加载模式
  3. Android上的Adobe AIR应用程序运行环境发布了!
  4. [Android]解决EditText设置成密码模式改变提示字体的问题
  5. Android应用程序进程启动过程(前篇)
  6. 在Android上授权Adobe AIR应用程序
  7. Android应用程序怎么刷到手机上

随机推荐

  1. 转!mysql 查询 distinct多个字段 注意!!
  2. 如何在MySQL中创建关系
  3. mysql查询统计连接情况
  4. Django dumpdata无法序列化现有列
  5. mysql5.7.23免安装配置说明in win7
  6. MySQL是一个非常流行的小型关系型数据库
  7. mysql5.7 Access denied for user 'root'
  8. 分页检索大型ResultSet
  9. MYSQL SET类型字段的SQL查询某个字段保函
  10. C运行查询显示命令不同步?