澳门新葡萄京官网注册 2

澳门新葡萄京官网注册安卓 Activity 的四种 launchMode

以此 launchMode 是在 AndroidManifest.xml 中 activity 中配置的。

  • standard,创立三个新的Activity。
  • singleTop,栈顶不是该项目标Activity,创设贰个新的Activity。不然,onNewIntent。
  • singleTask,回退栈中绝非该类型的Activity,成立Activity,不然,onNewIntent+ClearTop。
  • singleInstance,回落栈中,独有这三个Activity,未有任何Activity。

Activity的生命周期

澳门新葡萄京官网注册 1

Activity生命周期图

Activity的生命周期也正是它所在的进程的生命周期。

约定

standard

贰个Activity的开发银行顺序:

onCreate()→onStart()→onResume()

借使本文用 A -> B,表示 Activity A 中用 startActivity 运维 Activity
B。

简介:

每一回激活Activity时(startActivityState of Qatar,都制造Activity实例,并归入职分栈;

当另三个Activity运营时:

第一个Activity onPause()→第二个Activity
onCreate()→onStart()→onResume()→第一个Activity onStop()→onDestroy()。

standard

应用处景:

举个例子说从使用列表页中,点击应用详细情况,就足以用standard,常常情况下,都足以用standard。

当重回到第二个Activity时:

第二个Activity onPause() →
第一个Activity onRestart()→onStart()→onResume()
→第二个Activity onStop()→onDestroy()。

默认值。

singleTop

二个Activity的消亡顺序:

(情况一)onPause()→<Process Killed>
(情况二)onPause()→onStop()→<Process Killed>
(情况三)onPause()→onStop()→onDestroy()
Activity所处的生命周期开垦者是不能调节的,当Activity的生命周期产生改造时,开采者能够经过调用onXX(卡塔尔(قطر‎的艺术得到通报,在写Activity类时,通过重写生命周期方法,在Activity运营时自动调用生命周期方法成功开垦者的片段操作。

  1. onCreate
    :当活动第壹遍开发银行的时候,触发该措施,能够在这个时候成功活动的早先化职业。onCreate
    方法有四个参数,该参数可认为空( null ),也得以是在此之前调用
    onSaveInstanceState ()方法保存的状态音信。
  2. onStart :该措施的接触表示所属活动将被表现给客户。
  3. onResume :当八个活动和客商发生相互的时候,触发该方式。
  4. onPause
    :当一个正在前台运营的移位因为其它的移动需求前台运转而转入后台运营的时候,触发该措施。那时须要将移步的场地持久化,举个例子正在编辑的数据库记录等。
  5. onStop
    :当一个移动不再供给出示给客商的时候,触发该办法。借使内部存款和储蓄器恐慌,系统会直接截止那么些活动,而不会触发
    onStop 方法。
    所以保存处境音信是应该在onPause时做,并非onStop时做。活动若无在前台运转,都将被结束或然Linux管理进度为了给新的位移预留丰盛的存款和储蓄空间而每一天终止那个活动。因而对此开采者来讲,在筹划应用程序的时候,必得每一日铭记那豆蔻梢头标准。在局部情形下,onPause方法大概是运动触发的最终的主意,因而开拓者供给在此个时候保存须求保留的音信。
  6. onRestart
    :当处于终止状态的活动须求重新显现给顾客的时候,触发该措施。
  7. onDestroy :当活动销毁的时候,触发该措施。和 onStop
    方法相符,假设内部存款和储蓄器紧张,系统会一贯结束那个运动而不会触发该办法。
  8. onSaveInstanceState
    :系统调用该措施,允许活动保存从前的气象,譬如说在乎气风发串字符串中的光标所处的职位等。经常状态下,开拓者无需重写覆盖该措施,在暗中同意的落实中,已经提供了机动保存活动所涉及到的客户分界面组件的有所意况音信。

A -> B -> C -> C -> B,那个时候系统中有八个 Activity,当中 B、C
均有多个。

简介:

假若有个别Activity自身激活自个儿,即职分栈栈顶正是该Activity,则没有必要创建,其他情况都要开创Activity实例;

Activity栈

Activity的景色是由它所在的栈中的地点决定的。当叁个新的Activity运行时,这么些Activity会被挪动到Activity栈的栈顶。当客商按再次回到键可能Activity被finish(State of Qatar的时候,栈顶这些Activity会被移出栈,Activity随之消亡,Activity栈中的上二个Activity移至栈顶,变为活动状态。

澳门新葡萄京官网注册 2

Activity栈

二个应用程序的预先级是受最高优先级的Activity影响的。当调节有些应用程序是或不是要甘休去自由财富,Android内部存款和储蓄器管理应用栈来决定基于Activity的应用程序的事情未发生前级。

singleTop

应用:
  • 在通告栏点击收到的通报,然后须求运维叁个Activity,那些Activity就足以用singleTop,不然客户生龙活虎旦连接点击好三遍,每一回都会新建一个Activity。
  • 实则的费用进程中,测量检验妹纸没准给您提过那样的bug:有些场景下一而再火速点击,运维了多少个Activity。要是这时待运行的Activity使用
    singleTop形式也是可避防止那个Bug的。
  • 在开辟进程中,大家有贰个景观是从城市列表页选用东京(TokyoState of Qatar,跳到东京(Tokyo卡塔尔国页,再从东京(Tokyo卡塔尔页跳到瓦伦西亚页,其实日本首都页和波尔图页都是同二个activity,大家要求从乔治敦页点击再次来到时,能够一贯回到城市列表页,那时候,用singleTop也是能够很好化解这几个主题素材的。

Activity状态.

平时的话Activity有三种意况

  1. 活动状态:当三个Activity在栈顶,它是可视的、有一些子、可接收顾客输入的。Android试图尽最大只怕保持它活动状态,杀死别的Activity来担保当前活动Activity有充分的能源可应用。当此外三个Activity被激活,这些将会被中止。
  2. 暂停:在不菲情况下,你的Activity可视不过它从不规范,换句话说它被中止了。有望原因是一个透明也许非全屏的Activity被激活。当被暂停,三个Activity仍会当成活动状态,只可是是不可以承担客户输入。在极特殊的气象下,Android将会杀死贰个一曝十寒的Activity来为运动的Activity提供充裕的财富。当八个Activity变为完全隐形,它将会成为甘休。
  3. 甘休:当三个Activity不是可视的,它“结束”了。这些Activity将照旧在内部存款和储蓄器中保存它富有的气象和平交涉会议员音讯。就算如此,当别的地点须求内部存款和储蓄器时,它将是最有不小恐怕被放出能源的。当二个Activity甘休后,贰个很要紧的步子是要封存数据和当前UI状态。风流倜傥旦叁个Activity退出或关闭了,它将改成待用状态。
  4. 待用:
    在三个Activity被杀死后和棉被服装载前,它是待用状态的。待用Acitivity被移除Activity栈,况且要求在显示和可用以前再一次启航它。

本条与 standard 很相像,只是当对象 Activity 坐落于栈顶时,不成立新的。

singleTask

Activity运维方式

activity的起步方式有三种
standard、singleTop、singleTask、singleInstance。

  1. standard:规范形式,每一次调用startActivity方法时都会时有产生二个新的实例。
    例如:栈1中有A、B、C三个Activity,在C中调用startActivity{C},栈1变为:A、B、C、C。
  2. singleTop:倘若已经有三个实例坐落于Activity栈的最上端时,就不爆发新的实例,而只是调用Activity中的newInstance(卡塔尔方法。倘若不放在栈顶,会发出二个新的实例。
    例如:栈1中有A、B、C三个Activity,在C中调用startActivity{C},栈1仍为:A、B、C。
  3. singleTask:
    会在一个新的栈中发生那么些实例,将来每便调用都会动用这么些,不会去产生新的实例了。
    比方说:栈1中有A、B、C八个Activity,在C中调用startActivity{C},栈1仍是:A、B、C,何况会产生八个新的栈2:C,那时候不管哪个Activity调用startActivity{C},都将调用栈第22中学的C。
  4. singleInstance:二个Activity所处的栈中只好有该Activity的实例,无法有其它实例。

那么些运维方式能够在功效项目清单文件AndroidManifest.xml中举办安装,Activity标签中的launchMode属性。
也得以在代码中装置

Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

核心的Intent Flag有:

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP

着力的性状有:

taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch

各个运营形式的分别
所属task的区别
  平日情状下,“standard”和”singleTop”的activity的指标task,和选拔的Intent的发送者在同两个task内,就一定于何人调用它,它就跟哪个人在同多少个Task中。除非Intent包涵参数FLAG_ACTIVITY_NEW_TASK。即使提供了FLAG_ACTIVITY_NEW_TASK参数,会运营到别的task里。
  “singleTask”和”singleInstance”
总是把要开动的activity作为多个task的根成分,他们不会被运转到二个别的task里。

  • 是或不是允许四个实例
      “standard”和”singleTop”能够被实例化多次,何况是足以存在于差异的task中;这种实例化时贰个task能够包含三个activity的多个实例;
      “singleTask”和”singleInstance”则限定只生成二个实例,并且是task的根成分。
      singleTop
    供给如若创设intent的时候栈顶已经有要创制的Activity的实例,则将intent发送给该实例,而不成立新的实例。
  • 是还是不是允许别的activity存在于本task内
      “singleInstance”独自据有一个task,其余activity无法存在极其task里;
      假诺它运转了二个新的activity,不管新的activity的launch mode
    如何,新的activity都将会到其余task里运维(就如加了FLAG_ACTIVITY_NEW_TASK参数)。
      而除此以外三种形式,则可以和别的activity共存。
  • 是否每便都生成新实例
      “standard”对于每三个起动Intent都会转移八个activity的新实例;
      “singleTop”的activity假如在task的栈顶的话,则不生成新的该activity的实例,直接行使栈顶的实例,不然,生成该activity的实例。
      比如:
      现在task栈成分为A-B-C-D(D在栈顶),此时给D发多少个初叶intent,假诺D是
    “standard”的,则生成D的叁个新实例,栈变为A-B-C-D-D。
      如若D是singleTop的话,则不会坐褥D的新实例,栈状态仍然为A-B-C-D
      若是那时给B发Intent的话,不管B的launchmode是”standard” 依旧“singleTop” ,都会生成B的新实例,栈状态成为A-B-C-D-B。
      “singleInstance”是其所在栈的唯生龙活虎activity,它会每趟都被录用。
      “singleTask”
    假若在栈顶,则选择intent,否则,该intent会被扬弃,不过该task仍会回到前台。
    当已经存在的activity实例管理新的intent时候,会调用onNewIntent(卡塔尔(قطر‎方法,如若接纳intent生成八个activity实例,那么客户能够透过back键回到上一个气象;如果是曾经存在的二个activity来拍卖这么些intent的话,客户不可能经过按back键再次来到到那早前的意况。

假设 C 是 singleTop 的,则:

简介:

假使要激活的不胜Activity在职分栈中存在该实例,则无需创制,只供给把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;

A
-> B -> C -> C -> B,那时系统中有多少个 Activity,在那之中 B
是多少个,而 C 由于是
singleTop,且本身运转本人时放在栈顶,所以不会创设新的。

应用
  • 今天在做的,在标题详细情况页,点击步入应对页,回答完并finish后,回到问答实际情况页;假使难点详细情形页采纳standard方式,将若干遍创立难题详细情形页,而选取singleTask则可幸免该难点。
  • 诸如浏览器的主分界面。不管从多少个应用运营浏览器,只会运维主界面一回,别的情况都会走onNewIntent,何况会清空主分界面上面包车型地铁别的页面。

当今说说怎么情状下指标 Activity
坐落于栈顶呢?一是活动运行自身;二是指标放在自身的下生龙活虎层,先 finish()杀死自身再起步目的,目的就坐落于栈顶了。题外话:晕,居然本身都 finish()了,前边的 startActivity 还是可以运营。

singleInstance

singleTask

简介

以此情势特别相像于singleTask,系统中只同意一个Activity的实例存在。差别在于具备这几个Activity的天职业中学必须要有贰个Activity:即这么些单例本身。

这种气象下,只要 Activity 存在,就调用其 onNewIntent
方法,实际不是开创一个新的。假诺 Activity
官样文章,那本来没话说了,成立贰个新的。

应用
  • 举例锁屏、电话、闹铃提示,将闹铃提醒与闹铃设置抽离。
  • singleInstance不要用来中间页面,若是用于中间页面,跳转会不平日,举例:A
    -> B (singleInstanceState of Qatar ->
    C,完全抽离后,在这里运营,首先展开的是B。
  • 即便运用1的天职栈中创建了MainActivity实例,假诺接纳2也要激活MainActivity,则没有要求成立,两使用分享该Activity实例;

并且,它还要杀死目的 Activity 栈上部的 Activity。

参考

singleInstance格局下的坑
singleInstance作为中间页的主题素材
Activity的LaunchMode应用途景思量

假设 B 是 singleTask 的,则:

A -> B -> C -> C -> B,那个时候系统中有多个 Activity,C
被杀死了,B 拿在此之前的实例来用,并未开创新的。所以只剩 A、B。

singleInstance

它跟 singleTask 很像,只是它没那么霸气,它并不会杀死栈上部的 Activity。

假设 B 是 singleInstance 的,则:

A -> B -> C -> C -> B,那时系统中有四个 Activity,C
有多少个,B 有一个。

发表评论

电子邮件地址不会被公开。 必填项已用*标注