首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Activity 启动方式和 flag 详解

2、Activity 4 种加载模式 在 android activity 开发中,activity 之间跳转可能需要有多种方式,有时是普通生成一个新实例,有时希望跳转到原来某个 activity...加载模式便是决定以哪种方式启动一个跳转到原来某个 Activity 实例。...使用这个标志,如果正在启动 Activity Task 已经在运行的话,那么,新 Activity 将 不会启动;代替,当前 Task 会简单移入前台。...这种方式下,新 Activity 可以调用 setResult(int),并且这个结果值将发送给那个作为答复目标的 Activity。...由于默认系统不包含图形 Task 管理功能,因此,你不应该使用这个标志,除非你提供给用户一种方式可以返回到已经启动 Task。

1.6K11

2-AI--Activity启动方式

零、前言 standard:默认启动模式 |---启动一个Activity,该Activity就会在返回栈中入栈 |---该Activity处于栈顶位置 |---每次启动都会创建该...Activity新实例 singleTop: |---在启动活动时若栈顶已经是该Activity,则认为可以直接使用它 singleTask: |---整个应用程序上下文中只存在一个实例...|---两次相同实例之间Activity会被杀死 singleInstance: |---启用一个新返回栈来管理这个活动 一、测试类 Activity1 public class...模式,第二次Activity2并没有创建 ?...转载请注明 更多安卓技术欢迎访问:https://www.jianshu.com/c/004f3fe34c94 张风捷特烈个人网站,编程笔记请访问:http://www.toly1994.com 你喜欢与支持将是我最大动力

55040
您找到你想要的搜索结果了吗?
是的
没有找到

ActivityActivity启动模式:SingleTask

概述 总是看到Activity四种启动模式:Standard,SingleTask,SingleTop,SingleInstance,而且都是借助于官方文档理解。...但是在写demo测试时候,发现这个说法是不准确。这句话成立条件是,要启动Activityaffinity是唯一,即当前所有的任务中没有与该affinity相同任务。...总结 “singleTask”模式启动Activity,在启动时,会先在系统中查找属性值affinity等于它属性值taskAffinity任务是否存在:如果存在,则在该任务中启动;如果不存在,则会在新任务中启动...因此,如果想要设置“singleTask”启动模式Activity在新任务中启动,就要为它设置一个独立taskAffinity值。...如果设置了“singleTask”启动模式Activity不是在新任务中启动,它会在已有的任务中查看是否已经存在相应Activity实例,如果存在,会调用该实例onNewIntent,并且会把位于这个

67020

Activity启动流程

考察要点: 启动Activity会经历哪些生命周期回调 冷启动大致流程,涉及哪些组件,通信过程是怎么样Activity启动过程中,生命周期回调原理?...进程A与AMS交互过程 此处以跨进程启动Activity分析一下源码流程: A调用startActivity时,需要与AMS交互,此时需要需要获取到AMS代理对象Binder也就是上图AMP,通过...,并告知Zygote进程启动之后,加载ActivityThread这个类入口main函数,启动完成后返回进程pid,并向AMSHandler发送一个延迟消息,为是要求目标进程启动后,10秒钟内需要向...然后调用 ``` realStartActivityLocked(hr,app,true,true); ``` 方法,来启动Activity,如果我们不是启动另外一个进程,而是同一进程,那么这第二大部分就不会存在了...应用端Activity启动几个步骤 realStartActivityLocked函数会调用app.thread.scheduleLaunchActivity(new Intent(r.intent)

58750

Activity启动模式

Activity为什么需要启动模式: 当我们多次启动同一个Activity时候,系统会创建多个实例,并把它们一一放入任务栈当中,当我们单击back键时候,会发现这些Activity会一一回退。...Activity四种启动模式 standard:标准模式 标准模式,这也是系统默认模式。每次启动一个Activity都会重新创建一个新实例,不管这个实例是否已经存在。...一个任务栈中可以有多个实例,每个实例也可以属于不同任务栈。在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动那个Activity所在栈中。...ActivityFlags 比较常用几个Flag FLAG_ACTIVITY_NEW_TASK 这个标记位作用是指定Activity启动模式为“singleTask”启动模式,其效果和XML中指定该启动模式相同...如果被启动Activity采用standard模式启动,那么连同它之上Activity都要出栈,系统都会创建新Activity实例并放入栈顶。

54240

activity启动模式

创建两个activity,创建两个布局文件,布局中两个按钮,开启第一和开启第二个 当第一个界面打开时候,进程会创建一个任务栈,栈里面只有一个activity 点击第二个界面,任务栈里面会加入activity2...再次点击第二个界面,任务栈里面再次加入activity2 当点击返回时候,最后一个先弹出,依次弹出,这是标准情况下,standard模式 在一些特殊情况下,为了避免糟糕用户体验,如果发现任务栈栈顶存在这个...activity了,那么久不重复创建了,这种模式是singleTop启动模式,单一顶部 清单文件中,activity节点下 设置启动模式android:launchMode=”singleTop” 应用场景...webkit浏览器内核,当开启多个标签页时候,其实只是一个activity实例,这样比较节省资源。...singleInstance模式,单一实例,当界面启动开启任务栈以后,点击这个界面,又会创建出来一个单独任务栈,只存放着这一个activity实例,如果这个activity开启,就会把这个activity

48810

Activity启动流程

Activity启动流程很多文章都已经说过了,这里说一下自己理解。 Activity启动流程分两种,一种是启动正在运行appActivity,即启动Activity。...如无特殊声明默认和启动activityactivity处于同一进程。如果有声明在一个新进程中,则处于两个进程。另一种是打开新app,即为Launcher启动Activity。...后边启动Activity流程是一样,区别是前边判断进程是否存在那部分。 Activity启动前提是已经开机,各项进程和AMS等服务已经初始化完成,在这里也提一下那些内容。...涉及到类 ActivityStack:Activity在AMS栈管理,用来记录已经启动Activity先后关系,状态信息等。通过ActivityStack决定是否需要启动进程。...(点击原文链接查看原图) 涉及到进程 Launcher所在进程 AMS所在SystemServer进程 要启动Activity所在app进程 如果是启动Activity,就涉及上述三个进程。

79640

Android Activity启动模式

standard: 标准(默认)模式 当通过这种模式来启动Activity时,Android总会为目标 Activity创建一个新实例,并将该Activity添加到当前 Task栈中.注意,这种方式不会启动...:当将要被 启动Activity已经位于Task栈顶时,系统不会重新创建 目标Activity实例,而是直接复用Task栈顶Activity 假设 栈结构为 ABC 再打开C C为singleTop...当系统采用singleTask模式加载Activity时,又分为以下 三种情况: (1)如果将要启动Activity不存在,那么系统将会创建该 实例,并将其加入Task栈顶 (2)如果将要启动Activity...已存在,且存在栈顶,那么此时 与singleTop模式行为相同 (3)如果将要启动Activity存在但是没有位于栈顶,那么 此时系统会把位于该Activity上面的所有其他Activity 全部移出...实例 放入此全新Task中 (2)如果将要启动Activity已存在,那么无论它位于哪个应用 程序,哪个Task中;系统都会把该Activity所在Task转到 前台,从而使该Activity

55130

Activity启动流程

Activity启动流程很多文章都已经说过了,这里说一下自己理解。 Activity启动流程分两种,一种是启动正在运行appActivity,即启动Activity。...如无特殊声明默认和启动activityactivity处于同一进程。如果有声明在一个新进程中,则处于两个进程。另一种是打开新app,即为Launcher启动Activity。...后边启动Activity流程是一样,区别是前边判断进程是否存在那部分。 Activity启动前提是已经开机,各项进程和AMS等服务已经初始化完成,在这里也提一下那些内容。...涉及到进程 Launcher所在进程 AMS所在SystemServer进程 要启动Activity所在app进程 如果是启动Activity,就涉及上述三个进程。...暂停完,在该activity还不可见时,通知AMS,根据要启动Activity配置ActivityStack。然后判断要启动Activity进程是否存在?

1.1K31

Activity启动模式

一、LaunchMode 预备知识:任务栈(回退栈),后进先出 standard(标准模式):默认启动模式,每创建一个新Activity,都会产生一个新Activity实例并且放入相应任务栈中。...也就是说,在它启动时候,系统会为它分配一个新任务栈。由于singleTask复用性,在其他需要创建Activity时候,都不会创建新Activity。...用来标记Activity能否从启动Task移动到有着affinityTask(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在那个Task里。...一般来说,当Activity启动后,它就与启动Task关联,并且在那里耗尽它整个生命周期。...典型用法是:把一个应用程序Activity移到另一个应用程序主Task中。 例如,如果e-mail中包含一个web页链接,点击它就会启动一个Activity来显示这个页面。

98020

说说Activity启动流程

Activity是一个组件,组件启动是要通过AMS,和Application启动一样,Activity启动也会涉及到AMS、Zygote以及应用进程之间socket通信以及Binder调用。...上图就是Activity组件启动流程,当我们通过startActivity启动一个Activity组件时候,系统首先会向AMS发起调用,AMS会首先检查当前Activity组件所在应用进程是否已经被启动...之后AMS会在此通过应用进程Binder调用,调用应用进程创建Activity组件,如上图中scheduleLaunchActivity 要是应用进程已经启动,就是有上面的6,AMS直接通过应用Binder...上面的跨进程通信过程中,除了AMS和Zygote通信方式是本地socket,其他跨进程通信都是通过Binder机制完成。...AMS在通过Binder调用,调用应用进程启动Activity组件过程中: 1. 首先应用进程会通过ClassLoader加载对应class字节码文件; 2.

54420

Activity启动和关闭其他Activity

上一期我们学习了Activity创建和配置,当时留了一个悬念,如何才能在默认启动Activity中打开其他新建Activity呢?那么本期一起来学习如何启动和关闭Activity。...至于应用中其他Activity,通常都由入口 Activity启动,或由入口 Activity启动Activity启动Activity启动其他Activity有如下两个方法。...上面两个方法都用到了 Intent参数,Intent是Android应用里各组件之间通信重要方式,一个Activity通过Intent来表达自己“意图”——想要启动哪个组件,被启动组件既可是 Activity...// 方式一 // 创建Intent对象 Intent intent1 = new Intent(); // 设置需要启动Activity,以及要启动Activity上下文环境 intent1.setClass...(this, MyActivity.class); // 方式二 // 直接创建Intent对象,包含要启动Activity信息 Intent intent2 = new Intent(this,

3.9K50

Android框架简介--Activity--Activity启动

Activity A 启动 Activity B,Activity B所在进程未启动为例 大体经过已经几个阶段: startActivity.png 第一步 Activity A 调用AMS 启动接口...这是一个binder通讯,正常启动Activity方式,一般我们都会通过以下方式启动一个新Activity startActivity(new Intent(A_Activity.this,B_Activity.class..., app, } stack为mFocusStack, 这一部为取出栈顶Activity,即我们要启动activity,虽然之前activity启动,但ams里面栈信息在启动进程前都已经准备好了...这里调用了应用scheduleLaunchActivity,从名字看表示可以加载activity了 第五步 Activity启动 下面就切回到ActivityThread中去执行 public final..."); } break; getPackageInfoNoCheck 会去loadApk加载apk一些信息,后面启动activity需要调用到,下面会去执行activity

66610
领券