精华内容
下载资源
问答
  • Activity四种启动模式

    2016-01-11 12:59:07
    Activity四种启动模式

    Activity四种启动模式:

    • standard
    • singleTop
    • singleTask
    • singleInstance

    在说Activity之前,我们先来介绍一个小知识点:栈。为什么会介绍栈呢?主要在于Activity四种启动模式在内存中其实是以栈这种数据结构存储的。如果能比较好的理解栈也就能更好的理解Activity四种启动模式。
    栈(stack)作为一个先进后出(FILO)的数据结构,与队列一个先进先出(FIFO)非常类似。通俗你可以把它理解 洗盘子时叠起来的盘子,堆在最上面的先出去(先进后出),压在最下面的最后出去。(注:文章中的A B C D字母 都是指的activity

    standard


    standard作为activity的默认启动模式,非常像栈(stack)的先进后出,G处于最上面,A处于最下面。ActivityManager维护着一个充满activity的栈,第一个A通常是APP的入口activity,如图左边一样顺序添加A B C D E F G ,然后按照G F E D C B A的顺序退出栈列。
    这里写图片描述

    singleTop


    理解了standard启动模式 其实其他三个模式都很好理解,英文单词前缀都是single单例,后面接着是三种情况的单例,singleTop 可以理解为栈顶唯一,我们画图举例说明
    这里写图片描述
    在已经存在 A B C D 栈列中再添加一个新的D,ActivityManager并不会新建一个D,而是选择复用原来的D来保持singleTop中的唯一性。如果栈顶为D,此时添加一个E后再添加一个D会是什么情况呢?

    singleTask


    上面的问题如果在singleTop模式,栈中会有两个D。因为在添加第二个D的时候此时栈顶为E,那么在singleTask中会是什么情况呢?
    这里写图片描述
    在singleTask中,只能存在一个Activity 如果再添加一个相同的Activity ,ActivityManager会把在前一个相同的activity之后添加的activity全删掉(我自己读起来都有点晕,可以参照上图理解),并把这个activity置于栈顶来保持singleTask模式中的唯一性。

    singleInstance


    这种启动模式比较特殊,因为它会启用一个新的栈结构,将Acitvity放置于这个新的栈结构中,并保证不再有其他Activity实例进入。我比较是喜欢用代码来实现
    这里写图片描述

        Intent i = new Intent(Intent.ACTION_MAIN);
        i.setClassName(activityInfo.applicationInfo.packageName,activityInfo.name);
        i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(i);
    展开全文
  • Activity四种启动模式及应用场景

    千次阅读 2019-03-29 10:47:18
    面试的时候科大讯飞的一个面试官问我...一、Activity四种启动模式: (一)、基本描述 standard:标准模式:如果在mainfest中不设置就默认standard;standard就是新建一个Activity就在栈中新建一个activity实例; si...

     

    面试的时候科大讯飞的一个面试官问我Activity的启动模式和具体的应用模式;我也一想是啊,平时不太注意,只知道有这几个启动模式,结果到了关键的时刻卡壳了,做个记录:

    一、Activity四种启动模式:
    (一)、基本描述
    standard:标准模式:如果在mainfest中不设置就默认standard;standard就是新建一个Activity就在栈中新建一个activity实例;
    singleTop:栈顶复用模式:与standard相比栈顶复用可以有效减少activity重复创建对资源的消耗,但是这要根据具体情况而定,不能一概而论;
    singleTask:栈内单例模式,栈内只有一个activity实例,栈内已存activity实例,在其他activity中start这个activity,Android直接把这个实例上面其他activity实例踢出栈GC掉;
    singleInstance :堆内单例:整个手机操作系统里面只有一个实例存在就是内存单例;

    在singleTop、singleTask、singleInstance 中如果在应用内存在Activity实例,并且再次发生startActivity(Intent intent)回到Activity后,由于并不是重新创建Activity而是复用栈中的实例,因此Activity再获取焦点后并没调用onCreate、onStart,而是直接调用了onNewIntent(Intent intent)函数;

    二、Activity四种启动模式常见使用场景:
    这也是面试中最为长见的面试题;当然也是个人工作经验和借鉴网友博文,如有错误纰漏尽请诸位批评指正;

    LauchMode       Instance
    standard             邮件、mainfest中没有配置就默认标准模式
    singleTop           登录页面、WXPayEntryActivity、WXEntryActivity 、推送通知栏
    singleTask         程序模块逻辑入口:主页面(Fragment的containerActivity)、WebView页面、扫一扫页面、电商中:购物界面,确认订单界面,付款界面
    singleInstance    系统Launcher、锁屏键、来电显示等系统应用

    二.启动模式的使用方式

    1. 在 Manifest.xml中指定Activity启动模式

    一种静态的指定方法,在Manifest.xml文件里声明Activity的同一时候指定它的启动模式,这样在代码中跳转时会依照指定的模式来创建Activity。样例例如以下:

     

     <activity android:name="..activity.MultiportActivity" android:launchMode="singleTask"/>

    2. 启动Activity时。在Intent中指定启动模式去创建Activity

    一种动态的启动模式,在new 一个Intent后,通过Intent的addFlags方法去动态指定一个启动模式。例如以下:

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

    注意以上两种方式都能够为Activity指定启动模式,可是二者还是有差别的。

    (1)优先级:动态指定方式即另外一种比第一种优先级要若两者同一时候存在,以另外一种方式为准。
    (2)限定范围:第一种方式无法为Activity直接指定 FLAG_ACTIVITY_CLEAR_TOP 标识,另外一种方式无法为Activity指定 singleInstance 模式。

     

    三. Activity 的 Flags

    标记位既能够设定Activity的启动模式,如同上面介绍的,在动态指定启动模式,比方 FLAG_ACTIVITY_NEW_TASK 和FLAG_ACTIVITY_SINGLE_TOP 等。它还能够影响Activity 的运行状态 ,比方 FLAG_ACTIVITY_CLEAN_TOP 和 FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 等。

    以下介绍几个基本的标记位,切勿死记,理解几个就可以,须要时再查官方文档。

    1. FLAG_ACTIVITY_NEW_TASK

    作用是为Activity指定 “SingleTask”启动模式。跟在AndroidMainfest.xml指定效果同样。

    2. FLAG_ACTIVITY_SINGLE_TOP

    作用是为Activity指定 “SingleTop”启动模式,跟在AndroidMainfest.xml指定效果同样。

    3. FLAG_ACTIVITY_CLEAN_TOP

    具有此标记位的Activity,启动时会将与该Activity在同一任务栈的其他Activity出栈。一般与SingleTask启动模式一起出现。它会完毕SingleTask的作用。但事实上SingleTask启动模式默认具有此标记位的作用

    4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

    具有此标记位的Activity不会出如今历史Activity的列表中,使用场景:当某些情况下我们不希望用户通过历史列表回到Activity时,此标记位便体现了它的效果。它等同于在xml中指定Activity的属性:

     

    android:excludeFromRecents="true"

    四. 启动模式的实际应用场景

    这四种模式中的Standard模式是最普通的一种,没有什么特别注意。而SingleInstance模式是整个系统的单例模式,在我们的应用中一般不会应用到。所以,这里就具体解说 SingleTop 和 SingleTask模式的运用场景:

    1. SingleTask模式的运用场景

    最常见的应用场景就是保持我们应用开启后仅仅有一个Activity的实例。最典型的样例就是应用中展示的主页(Home页)。

    假设用户在主页跳转到其他页面,运行多次操作后想返回到主页,假设不使用SingleTask模式,在点击返回的过程中会多次看到主页,这明显就是设计不合理了。

    1. SingleTask模式的运用场景
    最常见的应用场景就是保持我们应用开启后仅仅有一个Activity的实例。最典型的样例就是应用中展示的主页(Home页)。

    假设用户在主页跳转到其他页面,运行多次操作后想返回到主页,假设不使用SingleTask模式,在点击返回的过程中会多次看到主页,这明显就是设计不合理了。

    2. SingleTop模式的运用场景
    假设你在当前的Activity中又要启动同类型的Activity,此时建议将此类型Activity的启动模式指定为SingleTop,能够降低Activity的创建,节省内存!

    /*
    * 复用Activity时的生命周期回调
    */
        @Override
        protected void onNewIntent(Intent intent) {
            super.onNewIntent(intent);
            setIntent(intent);
            initData();
            initView();
        }

    当前singleTop模式的Activity正处于栈顶时,跳转该Activity会调用onNewintent方法且不会重新创建该Activity实例,只会重新调用该实例,生命周期为:onPause->onNewIntent->onResume 

    展开全文
  • Activity四种启动模式的区别

    千次阅读 2016-10-11 09:53:48
    Activity四种启动模式的区别

    1)Activity的模式配置 

    <activity

                android:launchMode="standard"
                android:name="com.example.test.StandardActivity"
                 android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />


                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
            
             <activity
                 android:launchMode="singleTop"
                android:name="com.example.test.SingleTopActivity"
                android:label="@string/app_name" >
            </activity>
            
             <activity
                 android:launchMode="singleTask"
                android:name="com.example.test.SingleTaskActivity"
                android:label="@string/app_name" >
            </activity>
            
             <activity
                 android:launchMode="singleInstance"
                android:name="com.example.test.SingleInstanceActivity"
                android:label="@string/app_name" >

            </activity>

    2) 四种模式的解释 

    standard默认启动模式,这种模式的Activity的时候都是重新创建一个Activity的实例(简单来说每次都会执行onCreate方法)


    singleTop栈顶模式:如果Activity在栈顶,则该Activity不会重新创建,而是直接用次Activity(此时启动activity不会执行onCreate方法,但是会先执行onPause()方法后执行onResume()方法)


    singleTask栈缓存模式:这种模式当启动该Activity时会去栈队列中去查找该Activity是否存在,如果不存在会新建一个Activity(此时会调用onCreate方法),否则直接启动栈队列中的Activity(此时不会调用onCreate()方法)


    ④singleInstance单例模式:这种模式会把Activity单独存储到栈中,即用即拿系统只实例一次该Activity(onCreate方法只会被调用一次)



    展开全文
  • 安卓Activity四种启动模式解析

    千次阅读 2019-04-26 13:52:14
    前言:在介绍Android中的Activity四种启动模式之前,先说明一下Application,Task和Process的概念 Application:Application中,一个应用就是一个组组建的集合(activity ,receiver ,provider ,service ) Task...

    前言:在介绍Android中的Activity四种启动模式之前,先说明一下Application,Task和Process的概念

    Application:Application中,一个应用就是一个组组建的集合(activity ,receiver ,provider ,service )

    Task:只针对于activity的概念,task是一组关联activity的集合,task是可以跨应用的

    Process:直接受内核调度的执行单位,一个应用程序的所有组件运行在一个进程中

    总结:一个应用存在于一个进程中,我们的activty集合存在于应用中,task是对所有activity进行管理,值得注意的是并非是管理单一进程中应用的activity,所以为了打造良好的用户体验,界面的跳转逻辑处理十分有必要,从而引出activity的四种启动模式

     

    Activity的四种启动模式

    • standard

    标准的默认启动模式,这种模式下activity可以被多次实例化,即在一个task中可以存在多个activity,每一个activity会处理一个intent对象,(在A中再次启动A,会存在后面的A在前面的A上面,当前task会存在两个activity的实例对象)

    • singleTop

    如果一个singleTop模式启动的activity实例已经存在于栈顶,那么再次启动这个activity的时候,不会从新创建实例,而是重用位于栈顶的那个实例,并且会调用实例的onNewIntent()方法将对象传递到这个实例中,任务栈中从始至终有且只有一个activity的实例

    • singleTask

    启动singleTask模式的Activity时,会在系统中搜寻是否已经存在一个合适的任务,若存在,则会将这个任务调度到前台以重用这个任务。如果这个任务中已经存在一个要启动的Activity的实例,则清除这个实例之上的所有Activity,将这个实例显示给用户。如果这个已存在的任务中不存在一个要启动的Activity的实例,则在这个任务的顶端启动一个实例。若这个任务不存在,则会启动一个新的任务,在这个新的任务中启动这个singleTask模式的Activity的一个实例。

    • singleInstance

    总是在新的任务中开始,并且在新的任务中有且只有一个该实例,被该实例启动的activity会自动运行于里一个新的任务栈中,,当再次启动该activity的时候,会重用之前的实例,并且会调用onNewIntent()方法,将intent传递给该实例 

     

    总结:Android Framework既能在同一个任务中对Activity进行调度,也能以Task为单位进行整体调度。在启动模式为standard或singleTop时,一般是在同一个任务中对Activity进行调度,而在启动模式为singleTask或singleInstance是,一般会对Task进行整体调度。
     

    总结转载以下两篇博文

    https://blog.csdn.net/zhangjg_blog/article/details/10923643

    https://www.cnblogs.com/zhjsll/p/5089142.html

    展开全文
  • 一.Activity四种启动模式的特点 1.standard模式  Activity默认的启动模式,依次入栈出栈,满足"先进后出"的原则。这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加 2.singleTop模式  ...
  • 细谈Activity四种启动模式

    万次阅读 多人点赞 2018-06-06 17:04:32
    ),今天我们谈一谈我们在Android开发中必不可缺少的一个组件——Activity: Activity作为四大组件之一,也可以说是四大组件中最重要的一个组件,它负责App的视图,还负责用户交互,而且有时候还经常其他组件绑定...
  • Activity 四种启动模式的区别

    千次阅读 2013-12-17 17:00:30
    Android Activity 四种启动模式的区别 分享到: 通过昨天的学习,相信大家已经对Android Activity四种启动模式有了非常清楚的认识,那么,Android Activity四种启动模式有什么区别呢?这就是今天本文...
  • Activity四种启动模式总结

    千次阅读 2016-06-23 20:16:40
    Activity启动模式目前有四种,分别是standard、singleTop、singleTask和singleInstance。 怎么给Activity启动模式呢? 一般我们通过AndroidMenifest.xml文件配置,如下所示: &lt;activity ...
  • android:Activity四种启动模式简介

    千次阅读 2016-02-13 22:48:20
    Activity启动模式 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题 Activity有四种加载模式 1.standard(默认启动模式,每次激活Activity都会创建Activity实例,并放入...
  • android任务栈及activity四种启动模式

    千次阅读 2016-12-10 21:20:49
    一、android任务栈 栈:先进后出 队列:先进先出 任务栈Task中:打开一个Activity叫进栈 关闭一个activit出栈 任务栈是用来维护Activity的、是用来维护用户的操作体验 ...二、activity四种启动模式 ①standard
  • Android activity四种启动模式完全解析

    千次阅读 2016-03-08 10:20:56
    Android使用“任务栈”(也称“back stack”)存放启动的各个activity。一般情况下,一个应用只有一个任务栈。特殊情况允许一个应用使用多...activity四种启动模式分别如下: standard singleTop singleTask singleIn
  • 管理方式 Activity的管理方式 =任务栈 任务栈 采用的结构 = “后进先出” 的栈结构 每按一次Back键,就有一个Activity出栈 区别: ...有四种模式 standard 默认启动模式,每次启动Activi...
  • Android中Activity四种启动模式和taskAffinity属性详解

    万次阅读 多人点赞 2013-09-06 23:40:07
    在android应用开发中,打造良好的用户体验是非常重要的。...activity启动模式会影响Task和Back Stack的状态,进而影响用户体验。除了启动模式之外,Intent类中定义的一些标志(以FLAG_ACTIVITY_开头)也会影响Task和
  • 原文地址:... Android中Activity启动方式主要有四种 standard的启动方式 singleTop的启动方式 singleTask的启动方式 singleInstance的启动方式 demo下载地址:http://do
  • Activity四种启动模式对比

    千次阅读 2018-06-19 18:33:11
    1.Standard(标准模式-默认)例:我们从StandardActivity跳转到A_Activity,再次跳转到B_Activity,再次跳转到StandardActivity,再次跳转到A_Activity打印的logI/BaseActivity: *****************start************...
  • Activity四种启动模式说明

    千次阅读 2016-03-21 15:54:46
    1,standard标准模式: 每次启动一个Activity都会重新...被启动Activity会自动添加到启动它的Activity的任务栈中,因此用ApplicationContext启动standard模式Activity时会报错(Context没有所谓的任务栈) 2,singleTo
  • 开门见山,启动模式四种standard、singleTask、singleTop、singleInstance。 standard: 标准模式。这个是activity默认的启动模式,没有对其启动模式进行改变时,系统默认给activity启动模式,它允许存在多个...
  • 已经做了很久的Android开发,前些时日朋友在面试的时候被面试官问道Android开发中Activity的几种启动模式,咋一听觉得这也太基础了吧,之前我是做过了解...Activity四种启动模式<activity android:name=".MainActivi
  •  启动模式简单地说就是Activity启动时的策略。 启动模式有两设置方式: 1、在AndroidManifest.xml中的标签android:launchMode属性设置:启动模式有4,分别为standard、singleTop、singleTask、singleInstance...
  •  启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置;  启动模式有4,分别为standard、singleTop、singleTask、singleInstance; 讲解启动模式之前,有...
  • 一、启动模式分类: 二、启动模式介绍: 1.默认启动模式standard: 2.栈顶复用模式singleTop: 3.栈内复用模式singleTask: 4.全局唯一模式singleInstance: 一、启动模式分类: Standard(标准模式,默认) ...
  • Android--Activity四种启动模式

    千次阅读 2016-03-29 12:01:17
    launchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。...Activity一共有以下四种lau
  • Activity一共有以下四种launchMode: 1.standard 2.singleTop 3.singleTask 4.singleInstance启动模式在mainfest.xml里面的activity里面配置,如下图launchMode所示: 一,前提:Android对于Activity的...
  • 小编工作也有一段时间了,平时学东西挺多,但是总感觉学的东西忘得特别... 本篇文章的写的是在使用activity启动模式的时候,如果它们的启动模式不同,并且有多个activity一起使用,它们的任务栈怎么分配 ,新启动的
  • Activity的onNewIntent()方法何时会被调用 ...当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法 当ActivityA的LaunchMode为SingleInst

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 91,541
精华内容 36,616
关键字:

activity四种启动模式