前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >036android初级篇之Activity的启动模式

036android初级篇之Activity的启动模式

作者头像
上善若水.夏
发布2018-09-28 10:46:38
3890
发布2018-09-28 10:46:38
举报
文章被收录于专栏:上善若水上善若水上善若水

task容器任务栈

  1. 当用户点击某个应用程序图标打开一个应用时,那么这个任务就处于前端。如果这个应用程序之前未被打开过,就会创建一个新的任务Task。
  2. Task是一个Activities的收集器,专门收集用户操作交互所打开的Activity。这些Activities都被安排在一个回收栈back stack中,安排的顺序和它们打开的顺序一致。即先打开的安排在最底部,最后一个打开的安排在顶部。

运行模式介绍

你可以通过定义运行模式来定义Activities如何与Task进行交互。定义的两种方式如下:

  1. 使用manifest配置文件
  2. 使用intent的标识

例子:Activity A 启动 Activity B。如果B在manifest中定义了运行模式,并且A在启动B时,也在Intent中指定了B的运行模式,那么A在Intent的定义将覆盖B在manifest中的定义。

注:有些运行模式在manifest中定义有效未必在Intent中也有效,同样,在Intent定义有效的运行模式在manifest中未必生效。

Activity的launchMode属性来指定4中不同的运行模式

Standard:标准默认模式

在这种默认模式下,Activity可以被多次实例化,也可以运行在多个Task中,一个Task可以拥有多个Activity实例。

singleTop

在这种模式下,如果一个Activity实例已经存在于当前Task的最顶部,那么系统将调用onNewIntent()方法路由到这个实例,而不是创建一个新的Activity实例。

一个Activity可以被实例化多次,且可以从属于不同的Task任务,且一个任务中可以存在多个Activity实例(这情况仅仅存在于Activity实例不在Task任务的顶端)。

A-B-C-D:再开启D,back stack中的情形:
在标准模式下,则为 A-B-C-D-D
在singleTop模式,则为A-B-C-D
如果开启B
则在singleTop模式下为 A-B-C-D-B

singTask

这种模式下,系统创建一个新的Task,并在Task的底部实例化Activities。然而,当一个实例存在于一个独立的Task时,系统不是去创建一个新的实例,而是调用onNewIntent()路由到其他任务的实例。在同一时间,只存在一个Activity实例。

singInstance

于singTask相似,唯独一点不同的是,这个实例只能在一个单独的Task中使用。

如何使用Intent配置管理

在启动Activity时,你可以通过传递一个Intent入参给startActivity()方法,来实现与manifest配置类似功能,改变Activity在task中的行为。

  1. FLAG_ACTIVITY_NEW_TASK 和 singleTask 一样
  2. FLAG_ACTIVITY_SINGLE_TOP 和singleTop一样
  3. FLAG_ACTIVITY_CLEAR_TOP 这个模式是没有属性配置支持的。在这种模式下,如果启动一个已经存在于当前Task任务的Activity,那么Task顶部所有的Activity将被销毁,并且为将要启动的Activity新建一个Activity实例,存放在task的back stack的顶部。
  4. FLAG_ACTIVITY_CLEAR_TOP通常与FLAG_ACTIVITY_NEW_TASK一起结合使用, 结合使用可以达到这样的效果:找到在其他Task中存在的Activity,并将它放置到一个可以相应Intent的地方。如果是standard模式,那么它将从stack移除,并新建一个Activity去相应Intent,因为这种模式下,总是新建Activity。

参考链接

  1. Activity的启动模式
  2. Android 开发指南(一) 任务Task及回收栈back stack介绍
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.03.01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • task容器任务栈
  • 运行模式介绍
  • Activity的launchMode属性来指定4中不同的运行模式
    • Standard:标准默认模式
      • singleTop
        • singTask
          • singInstance
          • 如何使用Intent配置管理
          • 参考链接
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档