launchMode的应用场景

四种launchMode发动形式

standard形式

默许的发动形式。每次发动一个Activity,都会创立一个新的Activity实例放在Task栈顶。这个Task栈是发动新的Activity的Activity地点的Task栈。那么这时候就会有特殊的状况,如果是service或许Application发动的Activity,并没有Task栈,这时就需要我们经过addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)指定标记,创立一个新的Task。

launchMode的应用场景

app的大多数Activity皆采用这种发动形式。作为开发者,我们考虑到的便是用户在操作每个页面后,即便之间有重复的界面,按回退键也能够按照刚刚操作的顺序回退。

singleTop形式

这种形式存在两种状况:

  • Task栈顶不是要发动的Activity实例,这时和standard形式没有差异
  • Task栈顶是要发动的Activity实例,那么就会复用这个实例,而且回调该Activity的onNewIntent办法。因为不会创立Activity实例,所以不会回调其他办法。

launchMode的应用场景

比如说音乐软件的点击上一首下一首,通知详情页或许谈天界面,即经过点击通知栏消息进入Activity。能够避免有多次通知消息经过点击而产生较多Activity实例。增强Activity的复用性。

singleTask

这种形式有三种状况。

  • Task栈中不存在要发动的Activity实例,这时和standard形式没有任何差异
  • Task栈中存在要发动的Activity实例,且此实例在栈顶,这时和singleTop形式没有差异
  • Task栈中存在要发动的Activity实例,且此实例不在栈顶。这时会移除此实例上的所有Activity实例,使此实例置于Task栈顶,并复用此实例,回调onNewIntent办法

也便是说这是一种栈内的单例形式。这种形式下还能够经过manifest文件中的taskAffinity特点来指定要加载的Task栈。

<activity
    android:name=".activitys.MainActivity"
    android:launchMode="singleTask"
    android:taskAffinity="com.gl.task"/>

关于taskAffinity的值:每个Activity都有taskAffinity特点,这个特点指出了它希望进入的Task。如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个特点就等于Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就等于包名。

这种形式一般适用于软件的首页。

launchMode的应用场景

launchMode的应用场景

singleInstance形式

这种形式算是一种大局的单例形式,即只要有任何一个栈存在此Activity实例,就会复用此实例,回调onNewIntent办法。如果此实例不存在,那么就会创立新的Task栈,并放入Activity实例。

也便是说,这种形式下的Activity实例只有两种形式。

  • 不存在此实例
  • 存在此实例,且只在一个Task栈中而且该Task中只有该实例

launchMode的应用场景

这种形式一般应用于闹钟响铃界面、拨打接听电话界面等系统界面,保证此Activity实例只能存在一个。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。