xml地图|网站地图|网站标签 [设为首页] [加入收藏]

Activity的启动模式,Activity启动模式解析

来源:http://www.ccidsi.com 作者:呼叫中心培训课程 人气:149 发布时间:2020-02-07
摘要:当面试官说请你介绍一下activity运营格局,大许多人都能整两句,什么栈顶复用啊栈内复用啊,但是,你规定你确实懂运转形式吗? Task 法定文书档案 中关于task的解释: 义务是指在施

当面试官说请你介绍一下activity运营格局,大许多人都能整两句,什么栈顶复用啊栈内复用啊,但是,你规定你确实懂运转形式吗?

Task

法定文书档案 中关于task的解释:

义务是指在施行一定作业时与客户交互作用的意气风发多种 Activity。 那个 Activity 遵照分级的开荒顺序排列在仓库(即返回栈)中。

图片 1

task是足以跨应用的,这多亏task存在的叁个要害原因。有的Activity,固然不在同四个app中,但为了保持客商操作的连贯性,把她们投身同二个职分中。比方,在大家的利用中的一个Activity A中式点心击发送邮件,会运转邮件程序的三个Activity B来发送邮件,那七个activity是存在于区别app中的,不过被系统坐落于叁个义务中,那样当发送完邮件后,客户按back键重返,能够回到到原本的Activity A中,那样就保证了顾客体验。

重大内容

Activity是android的第四次全国代表大会组件之生龙活虎,能够说是大家android开垦中最常用的才具之风华正茂。有关activity的知识点比较多,本文要介绍的是activity的四大运营情势。四大运转方式分别是standard(那是大家最常用的也是私下认可的意气风发种运转形式State of Qatar、singleTop、singleTask、singleInstance。接下来我们将分别介绍那四大运维形式以至她们的利用场景。


假设您能答应出下边包车型地铁难点,那么你能够向来退出当前分界面。

Lunch mode

�职务和重回栈

在学习运行情势早前,大家需求先掌握一下职务和重临栈的学识,应用平时富含多少个Activity。各个Activity 均应围绕客商能够试行的特定操作设计,何况能够运营别的Activity。
职分是指在试行一定作业时与客户交互作用的大器晚成层层 Activity。 那几个 Activity 遵照各自的开垦顺序排列在仓房(即“再次回到栈”)中。
配备主显示器是大部分职务的源点。当顾客触摸应用运维器中的Logo(或主荧屏上的快速键)时,该行使的职务将现出在前台。 假使运用不设有任务(应用近期从未有过使用),则会创建三个新任务,并且该行使的“主”Activity 将用作旅舍中的根 Activity 张开。
日前 Activity 运转另一个 Activity 时,该新 Activity 会被推送到仓库最上端,成为大旨所在。 前五个 Activity 仍保留在仓房中,然而处于终止状态。�这些保存Activity的库房便是再次来到栈。理解了职责以至重回栈今后,大家就能够来标准学习运行方式了。

假如犹如下八个activity:

1.android:launchMode

"standard"(暗中认可形式)

默许。系统在开行 Activity 的职务中开创 Activity 的新实例并向其传递 Intent。Activity 能够再三实例化,而各类实例均可归于分歧的职分,并且四个职务能够享有多少个实例

在这里种方式下运转的activity能够被反复实例化,即在同二个职责中得以存在多少个activity的实例,种种实例都会管理三个Intent对象。要是Activity A的开行格局为standard,而且A已经运行,在A中再一次运行Activity A,即调用startActivity(new Intent(this,A.class)),会在A的上边再度启航四个A的实例,即当前的桟中的情况为A-->A。

"singleTop"

假诺当前职务的最上部已存在 Activity 的一个实例,则系统会经过调用该实例的onNewIntent()State of Qatar方法向其传递 Intent,并非成立 Activity 的新实例。Activity 能够频仍实例化,而种种实例均可归属差别的天职,並且二个任务能够具备两个实例(但前提是坐落再次回到栈顶端的 Activity 并不是 Activity 的现成实例)。

比方A的启航空模型式为singleTop,而且A的一个实例已经存在于栈顶中,再次启航A时,不会再一次创造A的实例,而是录取原本的实例,并且调用原本实例的onNewIntent(卡塔尔方法。职责桟中照旧那有一个A的实例。
要是以singleTop形式运维的activity的三个实例已经存在与职分桟中,不过不在桟顶,那么它的一颦一笑和standard情势相通,也会创建多个实例。

"singleTask"

系统成立新职分并实例化坐落于新职分尾部的 Activity。可是,若是该 Activity 的三个实例已存在于二个单身的职责中,则系统会通过调用现存实例的onNewIntent()卡塔尔国方法向其传递 Intent,实际不是创立新实例。贰回只好存在 Activity 的一个实例。

在同四个职务中持有唯后生可畏性,至于会不会打开新的天职与taskAffinity有关。

taskAffinity: Activity 有着亲和涉及的天职。从概念上讲,具有近似亲和关联的 Activity 归于同大器晚成职分(从客商的角度来看,则是归于同风姿浪漫“应用”)。 职分的亲和涉及由其根 Activity 的亲和关联鲜明。

风姿浪漫经未有对activity设置该属性的话,私下认可为application的*taskAffinity*,若是application也从未安装,则为app的包名。

启航八个singleTask情势的activity,会率先在系统中找与它的taskAffinity属性风姿浪漫致的职务栈

    1.并未有非常内定taskAffinity,则为眼下的task
    2.借使钦定了taskAffinity,先在系统中查找task,假如找不到则开创三个新的task,将activity作为root放置此中。
    3.举例要开动的Activity业已存在、但未曾放在Task栈顶,系统会将把位于该Activity上面装有Activity移出Task,进而使其转入栈顶。在该Activity之下的不改变。

    a1->a2->a3->a1, a1 按back,直接退出,不会回到a3.

    4.倘使急需在新的职务栈中运行,就要求为activity设置独立的taskAffinity.

    5.如若脚下activity是在新的义务栈中展开的话,那么之后在该activity中通过暗许情势启动的activity都在此个新的天职栈。

"singleInstance"

与 "singleTask" 相符,只是系统不会将其它其余 Activity 运营到含有实例的义务中。该 Activity 始终是其任务唯后生可畏仅有的成员;由此Activity 运维的其余 Activity 均在单独的天职业中学开发。

    1.有着全局唯生机勃勃性,即一切类别中只会设有叁个这么的实例
    2.富有独占性,即它会单独自占领用多个职分,被她翻开的任何activity都会运作在其它任务中。
    3.被singleInstance格局的Activity开启的其余activity,能够开启三个新任务,但不必然开启新的职分,也可能在已某个二个职务中开启(遵照taskAffinity)。

standard

standard是系统暗中同意的启航航空模型型式,系统在运行 Activity 的职责中创制 Activity 的新实例并向其传递 Intent。Activity 能够频仍实例化,而种种实例均可归于差异的天职,而且叁个职务能够享有多少个实例。重临栈以“后进先出”对象组织运营,下图正是standard方式下重返栈的专业经过。

图片 2

此地写图片描述

图 1. 显示职责中的每一种新 Activity 怎样向重临栈增添档期的顺序。 客商按“再次来到”开关时,当前 Activity 任何时候被销毁,而前二个 Activity 苏醒试行。
在并未有特殊需求的大部情状下,大家均运用这种暗许的运维方式。

  1. A
  2. B(singleTop)
  3. C(singleTask)
  4. D(singleInstance)

2.Intent flag

开发银行 Activity 时,您能够通过在传递给startActivity()卡塔尔的 Intent 中踏向相应的标识,校正 Activity 与其职务的暗许关联方式。可用以改良暗许行为的表明包涵:

FLAG_ACTIVITY_NEW_TASK

在新职分中运转 Activity。如若已为正在运转的 Activity 运转职责,则该义务会转到前台并回涨其最后状态,同不时候 Activity 会在onNewIntent()卡塔尔国中收取新 Intent

类似singleTask。

FLAG_ACTIVITY_SINGLE_TOP

若是正在起步的 Activity 是最近 Activity(坐落于重回栈的最上端),则 现存实例会抽出对onNewIntent()State of Qatar的调用,而不是创立Activity 的新实例。

相当于launchMode中的singleTop,例如说原本栈中意况是A,B,C,D,在D中运维D(参与该flag卡塔尔(قطر‎,栈中的事态仍旧A,B,C,D

FLAG_ACTIVITY_CLEAR_TOP

即使正在运转的 Activity 已在当前职务中运维,则会销毁当前义务顶上部分的装有 Activity,并透过onNewIntent()State of Qatar将此 Intent 传递给 Activity 已卷土而来的实例(今后放在最上部),并非开发银行该 Activity 的新实例。

只要有A,B四个Activity,在AndroidManifest.xml上将A Activity的装置了android:clearTaskOnLaunch="true"。然后A中的操作运转了B,步向了B:(1)假设此刻顾客按了Home键回到主显示屏上,然后又点击了主荧屏上的A的icon图标运营应用。那么此时不是跻身B,而是进入了A。(2)假使客户按了荧屏下方的”这两天职务列表“键,调出近日职务列表中,现身的是B,顾客点击,那个时候又进来的是B。

参考

Android中Activity多样运行形式和taskAffinity属性详整

Activity的任务栈Task以致运转格局与Intent的Flag详明

https://developer.android.com/guide/components/tasks-and-back-stack.html

singleTop

如果当前职责的最上端已存在 Activity 的二个实例,则系统会经过调用该实例的 onNewIntent(卡塔尔国 方法向其传递 Intent,实际不是开创 Activity 的新实例(官方文书档案的叙说)。那句话的乐趣正是当八个Activity处于栈顶且运转方式棉被服装置为singleTop时,当再次启航activity就能够透过onNewIntent(卡塔尔(قطر‎来运行它,在栈顶不会成立新的实例。
比如在默许意况下回到栈中依次有A-B-C-D八个activity,假使D的起步情势为Standard,当再次运行D时,职务栈中就能够化为A-B-C-D-D。不过借使D的开行格局为singleTop,则当再度启航D时,重临栈依然A-B-C-D。即便B的启航航空模型型式为singleTop,当再次运行B时,照旧会另行创造B的实例,重回栈变为A-B-C-D-B.

图片 3

这里写图片描述

这里ABCD的运维格局均为standard,所以当D再一次启航D时会重新创造D的实例,回落时的逐生龙活虎为D-D-C-B-A.

图片 4

此间写图片描述

此间将D的启航航空模型型式设置为singletop,所以当D再一次运维D时是因为这时放在栈顶的就是D所以不会产生D的实例了,回降时的相继正是D-C-B-A

图片 5

此间写图片描述

此处将B设置为了singletop,其余均为standard,点击D时起步了B,由于B并不在栈顶,所以重复成立了B实例,回落时的相继正是B-D-C-B-A.

它们的开发银行顺序依次是ABCDABCD,请描述activity栈内变化。

singleTask

那是第四次全国代表大会运营形式中最难精晓的一中了,系统成立新职责并实例化坐落于新职责底部的 Activity。但是,若是该 Activity 的一个实例已存在于二个单身的天职业中学,则系统会经过调用现成实例的 onNewIntent(State of Qatar 方法向其传递 Intent,实际不是创设新实例。(那是官方文书档案上的汇报,作者认为描述的太肤浅很难知晓卡塔尔(قطر‎。
要想根本理解singleTask那个运营情势,供给先明了叁个taskAffinity。每一个Activity都有taskAffinity属性,这一个性格提议了它仰望踏向的Task(职分卡塔尔。若是三个Activity未有显式的指明该 Activity的taskAffinity,那么它的这么些性子就非凡Application指明的taskAffinity,即使Application也从未指明,那么该taskAffinity的值就也正是包名。而Task也可以有和好的affinity属性,它的值等于它的根 Activity的taskAffinity的值。
前几天就能够来解释一下singleTask这些运行形式了。当二个activity的开发银行形式为singleTask,当要运行那些activity时,首先会招来有没有和它taskAffinity相仿的职责,如果未有,就能够单独创造叁个以那一个activity的taskAffinity为taskAffinity的职分栈,activity步入到这一个新创设的任务栈中;假若有其一任务栈,还大概会一连查找在此个职分栈中有未有它的实例存在,如空中楼阁,此activity归入栈顶,如存在,则将此activity上边的持有activity弹出栈外,activity坐落于此再次来到栈的栈顶,在这里进度中尚无创制新的activity实例。
比如,有一个taskAffinity为1的task中设有A-B-C-D多个activity实例,当有B的taskAffinity为1且运维情势为singleTask,那时候运维B时并不会运行新的实例,taskAffinity为1的task会变为A-B。如五个Activit E的taskAffinity为2且运转方式为singleTask,则会发生叁个新的taskAffinity为2的task,它的栈内唯有二个E,而taskAffinity为1的task中千篇风流罗曼蒂克律是A-B-C-D。

图片 6

这里写图片描述

此间将B的启航航空模型型式设置为了singletask且taskAffinity未重新恢复生机设置,当D运行B时,由于事情发生前A-B-C-D那几个重返栈中已经存在了B,所以B不会创造新的实例而是将C、D挤出重返栈,B通过onNewIntent(卡塔尔国至于栈顶,所以回落时的逐后生可畏正是B-A.

例:1,客户在主荧屏中式点心击应用的Logo运行应用后,弹出了第风流浪漫Activity分界面:A,并黄金年代生机勃勃张开了如下分界面 A -> B -> C -> D。2,此时按下home键再次来到主荧屏,然后再一次点击Logo运维这一个应用,大家会发觉弹出的分界面依然 D 并不是分界面 A。3,当我们总是点击重临键时,应用中分界面会遵照运维顺序反向的次第突显,约等于D -> C -> B -> A -> 主屏幕

singleInstance

这种运维情势也相比好掌握,当多少个activity以这么些运营情势运转时,都会为它独立创制二个职分栈,且那些职分栈中有且不能不有一个它。

通过这些例子我们得以清楚Android系统会为利用临时性的保留豆蔻年华组Activity运营链,记录运转顺序,那就引出了第一个概念:任务

NOTE

无论 Activity 是在新任务中运维,依然在与开发银行 Activity 类似的职责中运行,顾客按“重返”按键始终会转到前两个 Activity。 可是,若是开发银行内定 singleTask 运行方式的 Activity,则当某后台职责中留存该 Activity 的实例时,整个职分都会转变成前台。那个时候,重回栈包涵发展到货仓顶上部分的职分中的全部Activity。 下图浮现了这种情况。

图片 7

此处写图片描述

图 :显示怎么将开发银行形式为“singleTask”的 Activity 加多到重返栈。 假若Activity 已然是某些拥有和谐的再次来到栈的后台职务的风度翩翩部分,则全体重回栈也会上移到当前职责的顶上部分。

图片 8

此地写图片描述

如图,首先展开了bootmode1,点击了AA,若是发生了八个taskAffinity为bootmode1重临栈,其结构是AA-BB,点击home键将其放入后台后张开BootMode,依次点击A-B-C-D,个中D按键的点击效果是利用隐式运行张开bootmode1里的BB,然后径直按重返键,我们得以看看再次回到的意气风发后生可畏为BB-AA-D-C-B-A,切合地点的结论.

先说下职责的概念,Android官方把上述这种为了达成有些专门的学业而链式运行的一文山会海Activity合集称之为 任务

intent的标记

FLAG_ACTIVITY_NEW_TASK
在新任务中运维 Activity。尽管已为正在起步的 Activity 运转职务,则该职务会转到前台并回复其最终状态,同期 Activity 会在 onNewIntent(卡塔尔国 中选取新 Intent。这种运行标志的功用也正是运维格局中的singleTask。
FLAG_ACTIVITY_SINGLE_TOP
就算正在运营的 Activity 是当前 Activity(坐落于再次来到栈的顶上部分),则 现存实例会收下对 onNewIntent(卡塔尔(قطر‎ 的调用,并非创建 Activity 的新实例。这种运转标志的功效也便是运营格局中的singleTop。
FLAG_ACTIVITY_CLEAR_TOP
假定正在运维的 Activity 已在当前义务中运营,则会销毁当前任务顶端的具有Activity,并透过 onNewIntent(卡塔尔国 将此 Intent 传递给 Activity 已平复的实例(今后放在顶上部分),实际不是开发银行该 Activity 的新实例。而以此符号经常与FLAG_ACTIVITY_NEW_TASK在联合签名构成使用。

大家都清楚各种Activity都以互相独立的分界面,就是有了职务那样的概念,四个Activity才可以关联起来组成一个整机的利用。

职责能够并且存在多个呢

当然能够!

例:通常我们利用手提式有线电话机平时会在刷知乎和聊Wechat来回切换,每一遍切换系统都会为大家保留上一回离开的景色。

职务里Activity必需是缘于同贰个选取吗

当然不是!

本文由68399皇家赌场发布于呼叫中心培训课程,转载请注明出处:Activity的启动模式,Activity启动模式解析

关键词: 68399皇家赌场 Android 基础知识 模式 Activity

上一篇:充实一天,umeditor图片上传至七牛

下一篇:没有了

最火资讯