文档章节

Activity启动模式详解

YougaKing
 YougaKing
发布于 2017/02/27 16:45
字数 567
阅读 19
收藏 0

学习Activity的启动模式之前,首先要明白Android中任务和返回栈的概念。Android官方API指南:任务是指在执行特定作业时与用户交互的一些列Activity。这些Activity按照各自的打开销魂许排列在堆栈(即返回栈)中。

任务可以理解为就是一系列Activity,返回栈就是存放Activity的栈堆。返回栈最重要的一点:即返回栈中的Activity永远不会重新排列。

启动模式(launchMode)

在清单文件声明Activity时,使用<activity>元素中的launchMode属性 指定Activity如何与任务关联。launchMode属性启动模式有四种。

“standard” 默认模式

系统在启动Activity的任务中创建Activity的新实例并向其传送intent。Activity可以多次实例化,而每个实例均可属于不通的任务,并且一个任务可以拥有多个实例。

standard 模式的Activity在API21以下有不同的表现。启动Activity的intent如果来自同一个应用,API21上下的表现是一样的。如果启动Activity的intent来自不同的应用,API21以下Activity将和发送intent的Activity处于同一个人任务当中。API21及以上会创建一个新任务,同时Activity将作为新任务的根Activity。

“singleTop” 

singleTop模式基本和standard模式一样,唯一的区别是,启动的Activity已经处于返回栈栈顶,此时不会创建新的Activity实例,而是直接调用该activity实例的onNewIntent()方法。

”singleTask“

系统创建新任务并实例化位于新任务底部的Activity。如果该Activity的一个实例已经存在于一个单独的任务中,则系统会通过调用现有实例的onNewIntent()向其传递intent,而不创建新实例。

singleTask模式关键就在于是否设置taskAffinity

<activity
    android:name=".launchMode.SingleTaskActivity"
    android:launchMode="singleTask"
    android:taskAffinity="">
</activity>

如果设置了taskActivity就会创建新任务,否则并不会创建新任务。不过不管是否创建新任务,如果Activity实例已经存在任务中都回调用onNewIntent()向其传递intent,同时弹出所有在次Activity实例之上的activity。

"singleInstance"

 

 

© 著作权归作者所有

共有 人打赏支持
YougaKing
粉丝 6
博文 7
码字总数 6795
作品 0
西安
程序员
私信 提问

暂无文章

OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
30分钟前
11
1
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
17
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
20
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
24
0
CompletableFuture get方法一直阻塞或抛出TimeoutException

问题描述 最近刚刚上线的服务突然抛出大量的TimeoutException,查询后发现是使用了CompletableFuture,并且在执行future.get(5, TimeUnit.SECONDS);时抛出了TimeoutException异常,导致接口响...

xiaolyuh
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部