Android studio Activity启动模式

news/2024/7/5 3:36:47

1.四种启动模式:

1).standard(标准模式)

特点:1.Activity的默认启动模式
              2.每启动一个Activity就会在栈顶创建一个新的实例。例如:闹钟程序
    缺点:当Activity已经位于栈顶时,而再次启动Activity时还需要在创建一个新的实例,不能直接复用。

2).singleTop(栈顶复用模式)

 特点:该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶直接复用,否则创建新的实例。 例如:浏览器的书签。
    缺点:如果Activity并未处于栈顶位置,则可能还会创建多个实例。

3).singleTask(栈内复用模式)

特点:使Activity在整个应用程序中只有一个实例。每次启动Activity时系统首先检查栈中是否存在当前Activity实例,如果存在则直接复用,并把当前Activity之上所有实例全部出栈。例如:浏览器主界面。

4).singleInstance(单实例模式)

特点:该模式的Activity会启动一个新的任务栈来管理Activity实例,并且该实例在整个系统中只有一个。无论从那个任务栈中    启动该Activity,都会是该Activity所在的任务栈转移到前台,从而使Activity显示。主要作用是为了在不同程序中共享一个Activity实例。

2.设置位置

为 Activity 指定启动模式:

① 通过 AndroidManifest.xml 文件指定 “launchMode”属性,eg:

    <activity android:name=".SecondActivity"
        android:launchMode="singleInstance">
    </activity>

② 通过 java 代码在 intent 中设置标志位:

    Intent intent = new Intent();
    intent.setClass(FirstActivity.this, SecondActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(intent);

3.代码通用设置

Intent intent = new Intent();
intent.setClass(MainActivity.this, MainActivity2.class);
//栈中存在该实例,则重新创建该实例,并清除原实例上方的所有实例--多次跳转,每个活动只返回一次
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//跳转页面时,栈中原有实例都被清空,同时开启新的活动栈--登陆成功后不再返回登陆页面。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

四、Intent 中常用的 FLAG:

① FLAG_ACTIVITY_CLEAR_TOP:

    这里分两种情况:

    a. 当设置的这个 activity 在当前的 Task 中存在,并且启动模式为 standard 而且没有为这个 intent 中设置 FLAG_ACTIVITY_SINGLE_TOP 标志,此时它会清除这个栈中在它之上的(包括它自己)所有的 activity,然后重新创建这个 activity;

    b. 当设置的这个 activity 在当前的 Task 中存在,并且启动模式不为 standard 或者为这个 intent 中设置了FLAG_ACTIVITY_SINGLE_TOP 标志,此时它会清除这个栈中在它之上的(不包括它自己)所有的 activity,然后将这个 activity 重新回到栈顶并调用它的 onNewIntent() 方法;

② FLAG_ACTIVITY_SINGLE_TOP:

    效果和在 AndroidManifest.xml 中指定的 launchMode 为 singleTop 一样。

③ FLAG_ACTIVITY_SINGLE_TASK:

    效果和在 AndroidManifest.xml 中指定的 launchMode 为 singleTask一样。

④ FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:

    如果设置,新的 activity 不会在最近启动的 activity 的列表中保存。
 

 


http://lihuaxi.xjx100.cn/news/1052848.html

相关文章

ASEMI代理ADCMP600BKSZ-REEL7原装ADI车规级ADCMP600BKSZ-REEL7

编辑&#xff1a;ll ASEMI代理ADCMP600BKSZ-REEL7原装ADI车规级ADCMP600BKSZ-REEL7 型号&#xff1a;ADCMP600BKSZ-REEL7 品牌&#xff1a;ADI/亚德诺 封装&#xff1a;SC-70-5 批号&#xff1a;2023 引脚数量&#xff1a;5 工作温度&#xff1a;-40C~125C 安装类型&am…

jsp+sql城乡信息管理(系统)

第4章 总体设计 上章对系统进行了需求分析和可行性分析&#xff0c;证明此系统完全可行&#xff0c;这章就对系统的总体设计通过图文并茂的形式进行介绍。 第4.1节 数据库设计 4.1.1 概述 数据库技术是管理信息系统的一项重要技术其发展大致经历了三个阶段&#xff1a; ①人…

【代码随想录】刷题Day3

1.链表删除 203. 移除链表元素 循环删除 class Solution { public:ListNode* removeElements(ListNode* head, int val) {if(headnullptr)return head;ListNode* prevnullptr;ListNode* curhead;while(cur){if(prevnullptr&&cur->valval){ListNode* tmp cur;curcu…

数学建模第四天:数学建模算法篇之整数规划、指派问题及其求解方法

目录 一、前言 二、整数规划模型 1、整数规划特征 2、分枝定界法 ①分枝定界法的步骤 ②实际解题 三、0-1整数规划 1、隐枚举法 ①隐枚举法的步骤&#xff1a; ②案例 2、匈牙利法 ①指派问题 ②匈牙利法步骤 ③案例 一、前言 我们先来看一个例子&#x…

vue 监听是否切屏和开启小窗

前言 在做自己的项目的时候有用到判断设备是否有切屏&#xff0c;一般用的多的地方就是考试系统&#xff0c;切屏我们都知道&#xff0c;一般可以很容易的进行监控&#xff0c;只不过当开启了小窗的时候&#xff0c;之前一直没有解决办法&#xff0c;而现在则通过监控切屏和小…

Appuploader安装指南

转载&#xff1a;下载和安装appuploader 下载和安装appuploader IOS开发工具官网地址 Appuploader home -- A tool improve ios develop efficiency such as submit ipa to appstore and manage ios certificate 最新版本已经优化了没支付688给apple的账号登录流程&#xff0c…

JavaSE学习进阶day06_01 数据结构(进阶)

第一章 数据结构&#xff08;温习数据结构的内容&#xff09; 1.1 树基本结构介绍 树具有的特点&#xff1a; 每一个节点有零个或者多个子节点 没有父节点的节点称之为根节点&#xff0c;一个树最多有一个根节点。 每一个非根节点有且只有一个父节点 名词含义节点指树中的…

Unity 数据管理(整个游戏的数据怎么管理,数据系统怎么设计)

游戏数据管理通常包括以下几个方面&#xff1a; 数据库设计&#xff1a;包括数据库表结构设计、数据类型设计、数据索引设计、存储过程设计等。数据缓存&#xff1a;为了提高游戏的性能&#xff0c;通常需要将游戏数据进行缓存&#xff0c;比如将常用的数据放在内存中&#xff…