VPS参考测评推荐
专注分享VPS主机优惠信息
衡天云优惠活动
华纳云优惠活动
荫云优惠活动

我们来看看活动启动模式。

主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情!
我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作

小程序开发教程主要介绍活动启动模式的相关资料我们来看看活动启动模式。

推荐(免费):小程序开发教程

前言通常,当我们开始一个活动时,我们直接开始这个活动。可能我们不关注活动的启动方式。默认情况下,我们在默认启动模式下启动它。但是启动模式有时候更重要。例如,如果您希望一个活动只启动一次而没有多个实例,您可能需要将其设置为singleTask模式。所以有必要了解一下这些启动模式。同时需要注意的是,startup mode ≠启动模式,是指显示启动和隐式启动,不要混淆。后面我会有专门的文章来解释显示启动和隐式启动。

任务堆栈介绍要了解启动模式,首先要了解任务堆栈的概念。这里就不说任务栈的实现原理了。这里,我简单介绍一下什么是任务栈。我们启动的活动实例都放在一个叫做任务堆栈的东西中。我们都知道书库的特点是“后进先出”。比如任务栈是羽毛球桶,活动实例是羽毛球,放进去的只能先拿出来。所以当我们启动一个app的时候,我们会自动创建一个任务栈,然后我们会把活动实例扔进去。当我们按回车键销毁活动时,这些活动会依次从任务堆栈中出来。当然,一个app可以有多个任务栈。例如,以singleInstence开始的活动位于独立的任务堆栈中。理解了任务栈的概念后,我们可以看看活动的四种启动模式。

分析活动标准的四种启动模式这是标准启动模式,也就是默认的启动模式。每次启动此启动模式活动时,都会创建一个新的实例并将其放入堆栈,而不管堆栈中是否已经存在相同的实例。这也是最容易理解的。

顾名思义,SingleTop是位于栈顶的单个实例。你什么意思?假设您现在启动一个ActivityA,但是此时在栈顶已经有一个ActivityA实例,那么此时不会创建新的实例。但是,如果在非栈顶存在相同的实例,仍然会创建一个新的实例。例如,现在堆栈中的活动是ABC,A在堆栈的顶部。然后此时启动A,而不是创建另一个A活动,它会执行A的onNewIntent方法;但是如果此时启动C活动,由于栈顶是A而不是C,仍然会创建一个新的C实例,此时的栈情况是CABC。

单任务模式。这种模式意味着在这个活动的启动堆栈中只能存在一个实例,不管它是否在堆栈的顶部。与其他启动模式不同,这种启动模式可以指定要启动的堆栈。比如现在有一个stack Main,但是你可以为activity A指定一个stack name dev,这样当你启动A的时候,就会创建一个名为dev的stack。所以singleTask是指当你用singleTask的启动模式启动一个活动时,如果栈中没有相同的实例,那么会创建一个新的实例放入栈中;如果在指定的栈中存在相同的实例,比如栈中存在ABC,然后你启动B,那么你不是创建B的新实例,而是把B放在栈顶,把A推出去,然后执行B的onNewIntent方法。这时候栈的情况是BC。细心的读者会发现“往外推”。是的,我们都知道堆栈是一种后进先出的特性。比如你把三个羽毛球放在桶里,要想拿到中间的,是不是要先把最上面的拿出来?同理,要想把B提升到栈顶,就必须把A推出去。可能会有很多读者在启动后误以为是BAC,其实是BC,因为A要出栈,B才能出来。同理,如果ADFBC在栈中,这个启动B也是BC,以上都在栈外。

单实例单例模式。这是singleTask的增强版。他会自己建立一个新的栈,把这个新的实例放进去,这个栈只能容纳这个活动的实例。所以当这个活动重复启动时,只要存在,就调用活动的onNewIntent方法,切换到堆栈,而不是创建新的实例。

设置启动模式的两种方法了解活动的四种启动模式。接下来,我们来看看如何为他指定启动模式。

设置静态设置意味着为AndroidManifest中的特定活动设置启动模式。通过为活动指定launchMode参数来设置启动模式。例如:

lt活动Android:name = ;。主要活动 Android:launch mode = ;单一实例 / gt;设置动态设置是为了指定活动开始时的启动模式,例如:

Intent Intent = new Intent();intent.setClass(this,second activity . class);intent.addFlags(Intent。标志_活动_新_任务);startActivity(意图);您可以看到,我们通过方法intent.addFlags指定了启动模式。该方法传入一个参数来指定启动模式。其他参数包括:

Flag _ activity _ new _ task:单任务模式FLAG _ ACTIVITY _ single _ TOP:single TOP模式FLAG_ACTIVITY_CLEAR_TOP:清除此活动之上的所有活动。一般与singleTask连用。但是如果您的启动模式是标准的,那么这个活动和它上面的所有活动将被推出堆栈,一个新的实例将被创建并放入。比如现在栈里有ABCD。在flag _ activity _ clear _ top+standard模式下启动C时,首先清理ABC。是的,C也会被清理,然后新建一个C放进去。执行后,将是CD。注意特殊的pit singleInstance现在返回任务栈模拟一个场景:现在有三个活动A,B,C。A和C的启动方式是标准的,B的启动方式是singleInstance。先开始A,然后B,再c,这个时候问题来了。如果我这时候按返回键,会不会回到B?答案是回到a .再次点击返回桌面?答案是回到B,再次点击,回到桌面。其实也不难理解。我们都知道singleInstance会创建一个独立的栈。当我们启动A时,A首先位于堆栈中。当我们启动B时,我们将创建一个堆栈,并将B实例放入其中。此时再次启动C,会先切换到stack,因为singleInstance创建的栈只能放一个,所以C会先放入Stack。当你按下Return键时,Stack First中的活动会依次从堆栈中释放,直到全部释放后才会切换到Stack Second。所以要注意这一点。

singleTask多任务栈启动问题和上面的singleTop一样。模拟一个场景:现在有两个栈:第一:ABC;第二:QWE。第一个堆栈在前台,第二个堆栈在后台。位于堆栈的顶部。此时在singleTask模式下启动W会怎么样?会先切换到栈第二,然后把Q推出栈,把W提升到栈顶,执行W的onNewIntent方法。此时按回车键会将第二个栈中的活动依次推出栈,等所有活动都出来后再切换到第一个栈。

前面,我们讨论了为singleTask模式指定要启动的任务堆栈的名称。如何指定?您可以在AndroidManifest中指定相关属性,如下所示:

lt活动Android:name = ;. main 2活动 Android:launch mode = ;singleTask Android:task affinity = ;com.huan Android:allowtaskreparting = ;true / gt;这里解释这两个参数。

TaskAffinity:指定任务堆栈的名称。的默认任务堆栈是包名,因此不能以包名命名。AllowTaskReparenting:该参数指示是否可以切换到新的任务堆栈。它通常设置为true,并与上述参数一起使用。我之前提到过,你可以给singleTask的活动分配一个栈名,然后当你启动它的时候,你会切换到那个栈,把新的活动放进去。但是,如果allowTaskReparenting参数设置为false,它将不会切换到新堆栈。此参数表示新活动是否可以转移到新任务堆栈。简而言之:当我们启动一个singleTask活动时,该活动仍然保留在启动它的活动的堆栈中。但是,如果我们指定taskAffinity参数,或者如果启动的活动是另一个应用程序中的活动,将会创建一个新的任务堆栈。如果allowTaskReparenting参数为true,则此活动将被放置在新的任务堆栈中。这应该很清楚了。所以这两个经常一起用。

总结活动有四种启动模式,每种模式都有不同的功能,可以根据具体需要使用。但是,最重要的是了解它的实现原理,以及它在栈中是如何变化的,这才是更重要的。知道了这些,那些特殊情况就好理解了。我上面说的只是简单使用,活动启动模式还有很多需要了解的。后续可能会分析,读者可以自行了解更多。

以上是一起看看活动启动模式的细节。请多关注主机参考其他相关文章!

这几篇文章你可能也喜欢:

本文由主机参考刊发,转载请注明:我们来看看活动启动模式。 https://zhujicankao.com/81468.html

【腾讯云】领8888元采购礼包,抢爆款云服务器 每月 9元起,个人开发者加享折上折!
打赏
转载请注明原文链接:主机参考 » 我们来看看活动启动模式。
主机参考仅做资料收集,不对商家任何信息及交易做信用担保,购买前请注意风险,有交易纠纷请自行解决!请查阅:特别声明

评论 抢沙发

评论前必须登录!