Android 初学activity的启动模式

原创 2016年08月31日 10:20:14

  今天学习了一下activity的LaunchMode,突然就想尝试一下在博客上记录一下,所以参考Android开发艺术探究,写下了这篇文章,相当于一个总结!!

首先,默认情况下,我们会发现activity会保持”后进先出“的情况,即使是启动同一个活动,也会重复创建多个实例,这显然不合理,所以提供了启动模式来处理这个问题。启动模式有四种:standard,singleTop,singleTask,singleInstance:

(1)standard:

标准模式,也就是默认的启动模式,你每启动一个activity就会创建一个实例入栈,返回的时候,会遵照“后进先出”的原则。

(2)singleTop:

栈顶复用模式,这种模式下,会判断activity是否位于任务栈的栈顶,如果位于栈顶,则不会创建新的实例,同时onNewIntent()方法会被回调,如果不位于栈顶的话,则会重新创建该activity的实例。

(3)singleTask:

栈内复用模式,相比于其他模式,这是最为复杂的一种模式。这是一种单实例模式,该模式下,如果任务栈中存在该activity的实例的话,多次启动都不会创建新的activity实例,同时也会调用onNewIntent(),实例不存在的话,则会创建新的实例。该模式同时会请求需要的任务栈,任务栈不存在的话,会先创建任务栈后,在创建activity实例入栈。singleTask具有clearTop的效果,例如,以singleTask启动activity A,在A之上的活动都会被清除出栈。

singleTask启动模式中,activity需要的任务栈是根据TaskAffinity标识名字的,该属性默认值是包名,如果单独设置的话,不能与包名相同。TaskAffinity主要与singleTask或者allowTaskReparenting属性配对使用。任务栈分为前台任务栈和后台任务栈。

当TaskAffinity与singleTask同时使用时,activity会启动在与TaskAffinity相同名字的任务栈中。当TaskAffinity与allowTaskReparenting同时使用时,allowTaskReparenting的主要作用是activity的迁移,allowTaskReparenting被设置为true的话,当从应用A启动应用B的一个活动后,当B被启动时,该活动会被从A的任务栈中转移到B的任务栈中。我还没发现有什么用!!! 

(4)singleInstance:

单实例模式,这是一种加强的singleTask,它具有singleTask的所有属性,但它单独的处于一个任务栈中,所以不会创建的新的实例,除非这个任务栈被销毁。

指定启动模式:

(1)通过AndroidManifest.xml指定:

<activity
    android:name=".act.BuySuccessActivity"
    android:label="@string/title_act_buy_succ"
    android:launchMode="singleTop" />

通过lanuchMode指定。

(2)通过在Intent中设置标志位指定:

Intent intent =new Intent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

其中第二种的优先级大于第一种,同时存在以第二种为准,限定范围也有所不同,可根据需求选择。

书上列举了许多常用的标记位,这里也列出来方便大家查看:
FLAG_ACTIVITY_NEW_TASK
指定为singleTask模式启动。
FLAG_ACTIVITY_SINGLE_TOP
指定为singleTop模式启动。
FLAG_ACTIVITY_CLEAR_TOP
指定为singleTop默认具有该标志位,位于他栈上的所有activity都要出栈。
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
具有该标志的不会出现在activity历史activity的列表中,等同于android:excludeFromRecents="true"









[Android开发]Activity的四种启动模式及其应用场景

启动模式(launchMode)在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用...
  • CodeEmperor
  • CodeEmperor
  • 2016年01月08日 11:39
  • 15274

Android基础:最易懂的Activity启动模式详解

前言 Android基础中的Activity启动模式非常重要 本文将介绍对Activity启动模式进行全面介绍 目录1. 定义即Activity启动的方式2. 启动模式的类别Android启动提供了四...
  • carson_ho
  • carson_ho
  • 2017年01月22日 16:59
  • 3694

Android Activity 的四种启动模式

在实际开发中,应根据特定的需求为每个Activity制定恰当的启动模式。Activityde 的启动模式有四种。分别是standard、singleTop、singleTask和singleInsta...
  • YeeCeeYee
  • YeeCeeYee
  • 2017年03月22日 21:47
  • 305

对于Android的Activity启动模式的一些总结和理解

安卓Activity的启动模式 1.1   两种启动方式 1.      在AndroidMainfest.xml中启动 例如: AndroidMainfest.xml.xml中设置Activity的...
  • u010335298
  • u010335298
  • 2016年10月13日 14:55
  • 1359

Android四大组件---Activity之启动模式及启动模式的应用场景

在“Android性能优化”中有这么一条规则:    复用、回收Activity对象: 临时的activity及时finish, 主界面Activity启动模式设置singleTask,一般界...
  • u012810020
  • u012810020
  • 2016年01月11日 20:39
  • 1409

彻底弄懂Activity四大启动模式

最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手操作才能印象深刻,所以今天写一篇博文,结合案例理解Activity启动模式。由于之前看过“区长”的...
  • mynameishuangshuai
  • mynameishuangshuai
  • 2016年05月24日 16:04
  • 58872

Activity的四种启动模式的介绍及其应用场景

应用场景: 1.singleTop适合接收通知启动的内容显示页面。例如,某个新闻客户端的新闻内容页面,如果收到10个新闻推送,每次都打开一个新闻内容页面是很烦人的。聊天的对话窗口, 2.sing...
  • JustinNick
  • JustinNick
  • 2016年09月13日 22:30
  • 2542

Android Activity启动模式的设置

Android为了使我们能够打破默认的堆栈的先后出的模式,提供了两个种方式:一种是在AndroidManifest.xml定义Activity时指定它的加载模式,另一种是在用Intent开启一个Act...
  • u011361576
  • u011361576
  • 2013年11月02日 11:22
  • 2975

Activity四种启动模式详解

最近在学习《Android开发艺术探索》,所以对所学习到的知识做个总结,就算是做笔记吧。 Activity的启动模式目前有四种,分别是standard、singleTop、singleTask和si...
  • Mr_wzc
  • Mr_wzc
  • 2016年06月23日 20:16
  • 2672

关于代码实现activity的启动模式

在开发项目中我们可能会经常遇到,
  • u010897392
  • u010897392
  • 2014年08月07日 09:31
  • 1630
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 初学activity的启动模式
举报原因:
原因补充:

(最多只允许输入30个字)