Android-Activity 启动模式解析

Android - 全面解析Activity启动模式(LaunchMode) 欢迎Follow我的GitHub, 关注我的优快云. 在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask, singleInstance. 标准模式在每次启动时, 都会创建实例; 三种单例模式, 会根据情况选择创建还是复 阅读详情

1.Standard 标准模式

  • Activity的默认启动模式,在不显示指定启动模式的情况下,Activity都以这种方式进行启动。
  • 在Standard模式下,每启动一个新的Activity,就会在返回栈中进行入栈,并处于栈顶的位置。
  • 对于使用Standard模式启动的Activity,系统不检查该Activity之前是否已经在返回栈中存在,每次启动都会创建一个该Activity的新的实例对象。

代码测试:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, this.toString());

        setContentView(R.layout.activity_main);

        mStandardModeButton = (Button) this.findViewById(R.id.btn_standard_mode);
        mStandardModeButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, MainActivity.class);
                startActivity(intent);
            }
        });
    }

我们在这里所做的事情是,添加一个按钮,点击该按钮在MainActivity的基础上,再次跳转启动MainActivity。

然后运行程序,假设我们连续点击点击该按钮。查看LogCat,发现得到如下输入信息:
tsr

这里可以发现,每次跳转时,就会有一个全新的MainActivity的实例对象被压入返回栈的栈顶,无论之前是否已经有MainActivity活动的实例存在于栈中。
所以,自然而然的,当我们想要退出整个程序时,就需要连续点击三次back键,以达到目的。

2.SingleTop 栈顶唯一模式

  • SingleTop,顾名思义,最直接的或许就可以理解为,单栈顶模式。
  • 所以,其与Standard启动模式最大的不同之处正是在于:当一个Activity已经位于栈顶时,想要再启动一个该Activity,那么系统会直接复用位于栈顶的该Activity,而不会再去创建新的实例对象。
  • 与此同时,需要注意的就是,SingleTop模式的上述特性,仅仅只针对于正处于栈顶的活动对象。如果一个活动并非位于栈顶位置,那么当再次启动该Activity时,仍然会创建新的对象。

所以,如果我们在AndroidManifest.xml将MainActivity的启动模式改为SingleTop之后,再次运行我们在Standard模式里用到的代码,则会发现:
除了当MainActivity第一次被启动时,会创建一次实例对象,之后无论再点击多少次跳转按钮,都不会再创建新的实例对象。所以,只点击一次back键,就可以退出应用。

那么,下面我们修改代码:

MainActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, this.toString());

        setContentView(R.layout.activity_main);

        mSingleTopModeButton =  (Button) this.findViewById(R.id.btn_singletop_mode);
        mSingleTopModeButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);

            }
        });
    }

SecondActivity.java

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, this.toString());

        setContentView(R.layout.activity_second);

        mTurnButton = (Button) this.findViewById(R.id.btn_turn);
        mTurnButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(SecondActivity.this,MainActivity.class);
                startActivity(intent);
            }
        });
    }

这次,我们创建了两个Activity。我们测试的思路如下:
1.当程序初次运行时,MainAcitivty会被初次创建对象。
2.当从MainActivity跳转到SecondActivity,SecondActivity会被创建对象。
3.当在SecondActivity点击按钮,再次跳转到MainActivity。这时,虽然返回栈里已经有MainActivity的对象存在了,但是因为此时位于栈顶的是SecondActivity,所以仍然会再次创建一个全新的MainActivity对象压入栈内。

而当我们运行程序,得到的日志打印情况也印证了这一点:
这里写图片描述

3.SingleTask 栈唯一模式

上面我们说到,通过SingleTop模式,我们可以解决重复创建栈顶活动的问题。但是,当我们再次启动的活动并不位于栈顶的时候,则就还是不能避免重复创建多个活动实例的问题。这个时候,就可以通过SingleTask来解决。

SingleTask的不同之处在于:

  • 当再次启动一个Activity时,首先会检查,在当前返回栈中,是否已经存在该Activity的实例对象。
  • 如果已经存在,则会直接复用该对象,并且将栈中位于该Activity之上的活动全部清除出栈。
  • 如果当前还不存在,则会创建一个全新的Activity对象,并压入栈顶。

弄明白了SingleTask启动模式的特点之后,我们在测试SingleTop模式的代码的基础上,加以修改。

首先,在MainActivity.java中加上:

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

接着,在SecondActivity.java中加上:

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

最后,在AndroidManifest.xml将MainActivity的启动模式改为SingleTask。

再次运行代码,发现在LogCat得到的日志信息为:
这里写图片描述

通过日志,我们也验证了SingleTask启动模式的特征:
1.当我们初次启动程序时,返回栈还是空的,所以系统会创建一个全新的MainActivity对象,压入栈顶。
2.当我们点击按钮,跳转到SecondActivity。此时,返回栈中只有一个MainActivity对象,所以这次会创建一个SecondActivity的全新对象,并压入栈顶。
3.当我们在SecondActivity点击跳转按钮,想要返回到MainActivity。此时,系统检查到返回栈中已经存在MainActivity的对象了,但它并不位于栈顶。于是则会直接使用该对象,放到栈顶的位置,于是我们看到了MainActivity的生命周期方法onRestart得到了执行;
4.于此同时,除了将MainAcitivity压入栈顶之外,我们前面说到,还会降位于其之上的活动对象清除出栈,所以SecondActivity对象被清除,于是我们还看到了SecondActivity的onDestroy方法得到了执行。
4.最后,当我们点击back键,会发现直接就退出应用了。

实际应用场景模拟:
借助一些情景模拟,可以帮助我们进行更好的理解。
假设现在有这样一种情况,例如现在我们的应用中有一个聊天界面。在聊天界面中,我们可以点击当前某个按钮,查看聊天对象的个人资料。
当进入到资料查看界面后,例如,又有用户相册,我们点击进入到相册界面。以此类推……经过一系列操作后,我们已经跳转了多个Activity了。
此时,我们想要返回到聊天界面,回复聊天消息。这个时候,应当提供给用户应当怎么的操作方式?

首先,当然可以通过点击系统回退键,一步一步回退到聊天界面,但这样的操作未免过于枯燥和麻烦和操蛋。
所以,我们可以提供一个按钮“返回聊天”,直接从当前界面跳转回聊天界面。
也就是比如点击该按钮通过”startActivity(AlbumActivity.this,ChatActivity.class);”的方式来返回聊天界面。
那么这里,SingleTask就派上了用场。

试想一下,假如我们没有对Activity的启动模式做任何显示声明,其启动模式为默认的Standard模式。
那么,虽然当用户点击按钮跳转到聊天界面后,带来的不妥显而易见,我们来加以分析一下:

  1. 首先,这样做系统会为我们创建一个全新的”ChatActivity”的实例。那么也就是说,我们将从新进行一次Activity的生命初始化。并且之前的一些临时缓存数据,也将丢失。
  2. 虽然我们看似达到了目的,直接“回到了”聊天界面。但是,这个时候,从用户的思考角度出发,会理所应当的认为:在回到聊天界面之后,他再次点击回退键,应用则应该退回到一个他最初进入到聊天界面之前的界面。例如用户最初是在联系人列表界面,点击某个好友的头像进入到了聊天界面。那么,正确的逻辑则会为,此次点击back键盘之后,应该回到的,则是这个联系人列表界面。
  3. 但实际上,Standard启动模式下,应用却会回到之前的“相册界面”。而想要回到最初的联系人列表界面,则又回到了我们上面说的老问题,需要经历一些列的back按键操作。那么可能最后导致的就是,用户晕了!

而SingleTask则正好可以完美解决上述的问题,假设我们将聊天界面的启动模式设置为了SingleTask。那么:
1.当我们从相册界面跳转回聊天界面的时候,系统首先会检测到返回栈中已经有一个聊天界面的对象。则会直接找到这个对象,将其放到栈顶。
2.而之前位于聊天界面之上的所有活动,从用户操作的角度来说,既是用户在通过聊天界面点击按钮进入到个人资料查看界面之后所跳转的一系列Activity,都会被清除出栈。
3.这个时候,当用户在跳转回的聊天界面再次点击back键的时候,整个返回栈中的情况就是,聊天界面的activity位于栈顶,其之下紧跟着的就是其最初进入聊天界面之前的activity,所以自然的,也就会清楚的回到用户希望回到的界面。

4.SingleInstance 实例唯一模式

  • 当Activity被设置为该启动模式后,会有一条新建的返回栈专门管理里该Activity。所以,不管是哪个应用想要调用或访问该Activity,都会在该条栈里进行操作。
  • 那么,顾名思义,我们也能够发现:简单的来说,如果说SingleTask能够保证,在同一条返回栈里,一个Activity永远只会有唯一一个对应的实例的话。SingleInstance则能够保证,在当前系统下,该Activity永远只会有唯一的一个实例。

SingleInstance模式,被认为是最为复杂的一种启动模式。
怎么说呢,之前我们说到的三种启动模式,其Activity的管理都是在同一条返回栈当中进行的。
简单的理解来说,当一个应用启动,系统就会分配一条专门的返回栈来管理该应用的所有activity。
那么这时,就出现了一种之前的3种启动模式解决不了的情况:
假设,我们希望我们的应用能和另一个应用共享某个Activity的实例。

这样说,可能很难以理解,那么举例来说:
1.现在我们的手机上有“某某地图”以及我们自己的应用。
2.我们希望在我们的应用里共享“某某地图”当中的地图功能界面。

那么,假定的操作就应该为,例如:
1.首先,假设我们在“某某地图”里已经做了一定操作,地图界面被我们定位到了成都市。
2.我们返回了HOME界面,打开了自己的应用,在自己的应用里打开了”某某地图”的地图界面。
3.那么,所谓共享该Activity实例,我们要达到的效果就是,当我们打开地图界面,此时地图上显示的位置就应该是我们之前定位到的成都市。而不是地图的初始化显示方位。

那么,显然,通过此前的3种启动模式,我们是实现不了的。因为:
我们最初在“某某地图”中进行定位时,activity是位于该应用的返回栈里的。
当我们在自己的应用再次调用地图界面,系统的操作是,在我们自己的应用的返回栈里新建一个地图界面Activity的实例对象。
所以实际上两个“地图界面”是位于两个不同应用的各自的返回栈里的,两个毫无关联的Activity实例。

我们可以通过代码,来验证一下我们的猜想。

我们现在编写两个Activity,一个MainActivity用以代表我们自己的应用,一个SecondActivity存在于另一个应用。

SecondActivity.java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        Log.d("SecondActivity", "Task ID ==>> "+ getTaskId() + ",class object ==>> "+this.toString());
        this.setContentView(R.layout.activity_second);
    }

MainActivity.java:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG, "Task ID ==>> "+getTaskId() + ",class object ==>> "+this.toString());

        setContentView(R.layout.activity_main);

        mButton = (Button) this.findViewById(R.id.btn_standard_mode);
        mButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent mIntent = new Intent();
                ComponentName comp = new ComponentName("com.tsr.test","com.tsr.test.SecondActivity");
                mIntent.setComponent(comp);
                mIntent.setAction("android.intent.action.MAIN");
                startActivity(mIntent);
            }
        });

    }

运行程序进行测试,得到如下输出结果,分别是:
这里写图片描述
这里写图片描述

从输出结果,我们可以看到:
MainActivity代表的应用,其返回栈ID为4;SecondActivity代表的另一个应用,返回栈ID为3。
当初次打开SecondActivity应用的时候,在Task“3”里新建了一个实例对象@5271b580。
而当我们在MainActivity里再次调用SecondActivity时,在我们自己的应用Task“4”里再次新建了对象@526fbc4c。

从结果,我们可以看到,在标准的Standard模式下,无法实现在不同应用间共享某个Activity的需求。

那么,我们将SecondActivity的启动模式设为SingleInstance,再对代码进行测试,得到输出结果:
这里写图片描述
这里写图片描述

这次,我们看到:
MainActivity位于Task“8”当中,当我们在自己的应用MainActivity当中调用SecondActivity,系统新建了返回栈Task“9”,并在该返回栈中放入一个全新的SecondActivity的实例对象。
此时,当我们再打开SecondActivity本身所在的应用,调用SecondActivity,系统则会复用Task“9”当中的对象,而不会去做其他操作了。
从而,也就是实现了我们的目的,在两个应用间共享某个Activity。

另外,对于SingleInstance启动模式,还有另一个特点值得注意。
以《第一行Android代码》中的用例来说,假设现在有如下情况:

现在,我们的应用里有三个Activity,分别为:FirstActivity,SecondActivity,ThirdActivity。
它们之间的跳转关系是:FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity。
其中,SecondActivity的启动模式被设定为了SingleInstance。

那么,当完成所有跳转后,点击回退键,发生的事情需要值得注意一下:
当在ThirdActivity点击back后,回到的不是SecondActivity,而是FirstActivity。
而在FirstActivity再次点击back键后,才会回到SecondActivity,再次点击才会退出应用。

相信在上面的了解过后,你已经能够分析出原因,这是因为:
因为SecondActivity被设置为SingleInstance启动模式,所以当跳转时,系统会新开一条返回栈来管理它。
假设之前的FirstActivity存在于ID为1的栈里,那么SecondActivity存在于ID为2的栈里。
当由SecondActivity跳转至ThirdActivity时,ThirdActivity则仍然加入到ID位1的栈里。

所以最后的情况是:
ID为1的栈里,由上到下,分别是ThirdActivity,FirstActivity。而:
ID为2的栈里,则单独存放着SecondActivity。
所以当ThirdActivity出栈,紧接着进入栈顶的也就是FirstActivity。
而FirstActivity出栈后,ID为1的栈被清空,才轮到ID为2的栈里的活动与用户交互。

5.归纳总结

我们已经分别验证和理解了Android当中,Activity4种不同启动模式的特点。
最后我们加以总结,其实4种启动模式的命名很吊,我们在加以理解之后,实际上根据其名字,就可以很直观的记住它们的特点。

  • Standard 模式,默认的启动模式。特点是:不管任何情况,只要调用启动一次Activity,系统就会创建一个全新的实例对象,放入栈顶。
  • SingleTop模式,我们可以理解为:栈顶唯一模式。所以特点就是:对于位于栈顶的活动,系统保证其对象唯一性。也就是说,只要调用启动的目标Activity正位于栈顶,那么系统就绝对不会再重复创建其实例对象。
  • SingleTask模式,我们可以理解为:返回栈唯一模式。所以特点就是:在同一条返回栈里,一个Activity无论重复调用、启动多少次,它都只会有唯一的一个实例存在与该返回栈中。如果栈里当前不存在,则新建。若存在,则将其放到栈顶,并将其之上的活动实例都清除出栈。
  • SingleInstance模式,我们可以理解为:实例唯一模式。自然其特点则为:在当前运行系统中,该Activity只会有唯一的一个实例。系统会在该Activity初次启动时,新分配一条返回栈专门管理它。之后无论多少个不同的应用想要调用、启动该Activity,都是共用该返回栈里这个活动的唯一实例。
【Android基础】Activity启动模式以及Intent Flags 与 栈 的全面解析 Android开发的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制。 Intent主要用于2种情景下:发起意图 、广播其底层实现原理不在此篇文章的讨论范围,以后会陆续更新上的。 下面我就根据近期学习,总结记录下Activity启动模式 及 Intent Flags 与 栈 的关联分析。1、首先我们先搞清楚什么是栈:栈是一种常用的数据结构,栈只允许访问栈顶的元素,栈就像 阅读详情

相关推荐

Android Activity启动模式深度解析:从standard到singleInstance的实战指南

本文深入解析Android Activity的四种启动模式(standard、singleTop、singleTask、singleInstance),通过实战案例展示如何优化页面跳转逻辑和任务栈管理。掌握这些模式能有效解决重复创建、返回栈混乱等常见问题,提升应用性能和用户体验,是Android开发者的必备技能。

weixin_29256771的博客 342

Android——Intent在活动之间跳转

一、使用显式Intent Intent intent = new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); 二、使用隐式Intent 在使用隐式跳转的时候我们要在清单配置 action 和 categoty 标签,在action标签中我们指明了当前的活动可以相应 比如 android.intent...

怪咖小白的博客 1284

Android系统启动流程全解析--你知道Android系统启动都干了啥吗

只要是Android系统,运行的第一个程序一定是引导程序,可以这么说,所有的unix系统都有引导加载程序。这个引导加载程序的作用是在在加载 Linux 内核之前进行低级(底层)系统初始化。Android系统启动的第一阶段是将recovery镜像加载到系统flash里(就是我们的固定内存Rom),这也是引导程序的主要功能。

zhonglunshun的专栏 5722

Activity之任务和返回栈

一个应用程序中会有多个activity,每个activity一般都有自己独立的功能。我们可以用activity启动自己应用中的另一个activity。例如:从一个数据列表界面,跳转到一个数据详情界面。也可以用我们的activity去打开其他应用的activity,比如要发送一封邮件。就是使用intent去跳转到邮箱应用的activity中,邮件发送完成之后,点击返回就可返回。即使有很多activit

Simon_night的专栏 928

Android Activity启动模式深度解析与实战

在Android应用开发中,Activity是构成应用界面的核心组件之一。理解Activity的启动模式(launchMode)对于构建高效、流畅的页面导航体验至关重要。Android系统提供了四种主要的启动模式:standardsingleTopsingleTask和,它们决定了Activity在任务栈(Task Stack)中的创建和复用方式。本章将逐一介绍这些模式的基本定义与设计目的,并结合任务栈的概念,帮助开发者理解不同模式在实际开发中的应用场景,为后续章节的深入分析奠定基础。

weixin_29997223的博客 1023

Surface Pro 4/5/6/7保姆级黑苹果安装:从Windows分区到OC引导配置全流程(含EFI文件替换避坑)

本文详细介绍了在Surface Pro 4/5/6/7上安装黑苹果的全流程,包括Windows分区、OC引导配置和EFI文件替换等关键步骤。通过实战经验分享,帮助用户避开常见陷阱,实现Windows与macOS双系统完美共存,特别适合对黑苹果安装感兴趣的Surface Pro用户。

weixin_30300225的博客 1358

Activity系列:(一)烦人的Activity跳转

妹子我写代码很辛苦/(ㄒoㄒ)/~~ ,转载请注明出处哦~http://blog.csdn.net/u011791526/article/details/73650360 作者catRuan(阮妹子) 联系方式:QQ:940472401 邮箱:940472401@qq.com       写项目的时候,往往很容易忽略activity的跳转关系,导致一些应该结束的act

u011791526的博客 1929

Proteus 8.17安装部署全指南:避坑、汉化与STM32库配置

Proteus是一款广泛用于单片机仿真与电路设计的EDA工具,其核心价值在于支持嵌入式系统原型验证与教学实践。Proteus 8.17版本重构了许可证机制(LIC Engine)、依赖环境(VC++ 2019/NET 4.8)及路径加载逻辑,导致传统安装方法失效。掌握正确安装部署流程,是保障原理图绘制、VSM仿真(如51/STM32/ESP32)及外设波形观测(OLED、SPI、ADC)稳定运行的前提。本文聚焦Windows平台下零失败安装路径选择、权限配置、汉化实施与高频器件(如STM32F103)元件库

weixin_33377602的博客 402

Android 系统启动流程解析

Boot ROM:当电源按下,引导芯片代码开始从预定义的地方(固化在ROM)开始执行。加载引导程序到RAM,然后 执行Boot Loader:引导程序是在Android操作系统开始运行前的一个小程序。引导程序是运行的第一个程序,因此它是针 对特定的主板与芯片的。引导程序分两个阶段执行:第一个阶段,检测外部的RAM以及加载对第二阶段有用的程序;第二阶段,引导程序设置网络、内存等等。这些对于运行内核是必要的,为了达到特殊的目标,引导程序可以根据配置参数或者输入数据设置内核。Kernel:Android内核与桌面

风的轨迹 1970

HFSS实战:手把手教你设计3.3-10.6GHz超宽带微带天线(附S11优化技巧)

本文提供了一份基于Ansys HFSS的超宽带微带天线实战设计指南,详细讲解了从3.3GHz到10.6GHz天线的建模、仿真与优化全流程。文章重点剖析了阻抗匹配的核心挑战,并分享了通过接地板开槽、参数化扫描及目标驱动优化等系统性技巧来优化S11曲线的实用方法,帮助射频工程师快速掌握超宽带天线设计的关键技能。

2y3u4i5o6p的博客 1080

Flink实战项目——城市交通实时监控平台

本项目是与公安交通管理综合应用平台、机动车缉查布控系统等对接的,并且基于交通部门现有的数据平台上,进行的数据实时分析项目。

yangwei2048的博客 836

对于安卓开发中activity的四种启动模式的简单解析

对于安卓开发中activity的四种启动模式的简单解析为什么使用启动模式开始使用启动模式四种启动模式介绍四种启动模式使用场景 为什么使用启动模式   在我们安卓开发过程中大家一定遇到过各种小问题,让人摸不着头脑。比如在我们编写好了登陆页面之后,模拟登陆,在网速比较慢时就会着急多点几次登陆按钮,之后进入主页面之后就会发现按手机的返回键时会返回好几个主页面,这就是我们在点击登陆时创建了太多的主页面的实例导致的小问题,但这种问题修改一下主页面的启动模式就可以很好的解决。 开始使用启动模式   有过android

qq_41167962的博客 459

C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

qls315的博客 1818

安卓Activity四种启动模式解析

前言:在介绍Android中的Activity四种启动模式之前,先说明一下Application,Task和Process的概念 Application:Application中,一个应用就是一个组组建的集合(activity ,receiver ,provider ,service ) Task:只针对于activity的概念,task是一组关联activity的集合,task是可以跨应用的...

Aiden-Y 1709

【异常】DeepSeek API HTTP 401 认证失败错误完整排查与解决方案

摘要:本文针对DeepSeek API开发中的HTTP 401认证失败错误进行深度解析,指出该错误属于不可重试的认证类问题。文章首先拆解错误日志关键字段,区分401与其他API错误的本质差异。随后提供优先级排序的全链路解决方案:1)检查API密钥有效性;2)规范请求头认证格式;3)排查账户权限状态;4)验证请求环境配置。最后建议通过新建测试密钥、使用官方示例代码或联系技术支持进行兜底处理。全文采用技术脱敏处理,为开发者提供系统性的401错误排查指南。(149字)

奶爸的编程之路,也就一周冷个三天 1524

第六部分:VTK进阶(第182章 体素化与隐式建模)

本文系统介绍了基于点云构建有符号距离场(SDF)的核心原理与VTK实现方法。主要内容包括:1)SDF的基本概念与算法原理,通过体素网格隐式表达几何表面;2)关键参数配置指南,如体素分辨率、边界范围和影响半径的选择;3)点云法向估计、SDF计算与等值面提取的完整工作流程;4)常见问题解决方案与性能优化建议。文中提供了详细的C++代码示例,展示从随机点云生成SDF并重建曲面的完整过程,特别强调了法向估计、参数调优和后处理等关键环节。该方法适用于点云表面重建、几何处理等应用场景。

仰望星空的博客 528

Android中Activity的启动模式解析

文章目录前言关于任务栈简介解析Activity的四种启动模式standardsingleTopsingleTasksingleInstance设置启动模式的两种方法静态设置动态设置特别注意的坑singleInstance返回任务栈singleTask多任务栈启动问题singleTask的TaskAffinity与allowTaskReparenting参数总结参考资料 前言 平常我们启动活动的时候...

一只修仙的猿 292

eCognition易康操作教程(二):多尺度分割基于多光谱数据构建规则集,结合DSM高程数据提取建筑物、树木和绿地

一、数据 数据来源:教程中的实验数据,共包含RGB三个波段,还有数字地表模型(以下简称DSM)文件。 图一 RGB影像 数据特征:数据范围较小,要素种类少,仅包含较多的建筑和大片的绿地。由于建筑的房顶使用的材料和材料颜色不同,所以建筑的光谱特征没有规律,是不连续的特征。而绿地的光谱特征则十分容易分辨。 但是建筑通常具有规则的形状,而且建筑相比于周围其他要素...

蒹葭苍苍 8302

android 获取启动模式,Android Activity启动模式全面解析

在android里,有4种activity的启动模式,分别为:“standard” (默认)“singleTop”“singleTask”“singleInstance”在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask...

weixin_28717683的博客 551

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android Activity启动模式全面解析

在Android应用中, Activity是最核心的组件, 如何生成一个Activity实例, 可以选择不同的启动模式, 即LaunchMode. 启动模式主要包括: standard, singleTop, singleTask, singleInstance. 标准模式在每次启动时, 都会创建实例; 三种单例模式, 会根据情况选择创建还是复用实例. 在Activity启动中, 创建实例的

三杯五岳 463

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Android】【TaskStack】任务栈与Activity启动模式全解析

说到Activity启动模式,相信大家肯定都不模式,多少会有所接触 大多人应该都知道SingleInstance模式可以保证Activity单例,对其它模式的功能和具体使用场景应该都不是很清楚 LaunchMode的背后,其实本质上是TaskStack管理,和Activity切换管理 这里就给大家完整地讲解下关于任务栈的全部知识和原理,以及应用场景 什么是任务栈 顾名思义,任务栈就是通过一个栈的数据结构来管理一系列任务,实际上,这里的任务指的就是Activity,任务栈就是管理Activity切换的 任务栈

天天向上 Up Up Up (*^▽^*) 4938

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

彻底解析android中activity的启动模式

让我说一下对Activity启动模式的理解。我觉得对某个知识点的理解必须要动手写文档代码才能印象深刻,所以写一篇博客,结合案例理解Activity的四种启动模式。 众所周知当我们多次启动同一个Activity时,系统会创建多个实例,并把它们按照先进后出的原则一一放入任务栈中,当我们按back键时,就会有一个activity从任务栈顶移除,重复下去,直到任务栈为空,系统就会回收这个任务栈。但是这

abc1190的博客 352

【Android】Activity生命周期、四种启动模式、任务栈、状态转换等全网最强解析,看这一篇文章就够了

Activity是Android组件中最基本也是最为常见用的四大组件之一。Android四大组件有Activity,Service服务,内容提供,广播接收器。Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过来显示指定控件,显示用户可见的界面控件等。在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。.........

向着太阳迎着光 2094

二、Android开发艺术探索之Activity启动模式全解析

1.Activity的LaunchMode 为什么会有启动模式一说,当我们创建Activity时,系统会将它们一一放入任务栈中,任务栈是一种“后进先出”的栈结构,也就是最后放入的Activity会在最上面,如果多次启动同一个Activity,系统会反复创建多个实例,这样很多余,所以就有了启动模式这个概念。 1.standard: 标准模式,系统默认的模式,每次启动一个Activit...

kimlllll的博客 143

Android activity四种启动模式完全解析

Android使用“任务栈”(也称“back stack”)存放启动的各个activity。一般情况下,一个应用只有一个任务栈。特殊情况允许一个应用使用多个任务栈。典型的FILO(First In Last Out)数据结构。点击“back”键,自上至下依次出栈结束activity。activity的四种启动模式分别如下: standard singleTop singleTask singleIn

一口仨馍 3064

android深入解析Activity的launchMode启动模式,Intent Flag,taskAffinity

[置顶] android深入解析Activity的launchMode启动模式,Intent Flag,taskAffinity 标签: androidlaunchmode 2015-12-09 14:17 5390人阅读 评论(7) 收藏 举报  分类: Android(88)  launchMode 版权声明:转载请标明出处http://blog.

breeze666的专栏 641
上一篇: Git的基本原理 及 常用命令情景模拟
下一篇: Android ContentProvider UnderStanding
LaterEqualsNever
博客等级 码龄12年 297粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值