2016 - 2024

感恩一路有你

如何查看安卓app界面的activity Activity的启动模式是怎样的?

浏览量:3792 时间:2023-04-20 07:51:49 作者:采采

Activity的启动模式是怎样的?

你好,安卓从业者来回答这个问题。首先,让我们 让我们谈谈为什么Activity需要启动模式。我们知道,默认情况下,当我们多次启动同一个活动时,系统会创建多个实例,并将它们逐个放入任务堆栈。当我们点击后退按钮的时候,会发现这些活动会一个一个的后退。任务堆栈是先进先出的堆栈结构。这个很好理解。每按一次back键,就有一个活动退出堆栈,直到堆栈为空。当堆栈为空时,系统将回收任务堆栈。关于任务栈的系统工作原理,我们暂且不说,后续章节也会介绍任务栈。知道了活动的启动,就可以发现一个问题:多次启动同一个活动会创建多个实例。Isn 这不好笑吗?活动可以 t设计的时候没有考虑这个问题,所以提供了启动模式来修改系统的默认行为。目前有四种启动模式。

标准

单身公寓

单一任务

单一实例

standard:

标准模式,这也是系统的默认模式。每次启动活动时,都会重新创建一个实例。无论这个实例是否已经存在,创建的实例的生命周期都符合典型情况下活动的生命周期,如上所述:onCreate(),onStart()onResume()都会被调用,这是典型的多实例实现。一个任务堆栈可以有多个实例,每个实例可以属于不同的任务堆栈。在这种模式下,无论谁启动这个活动,都将在启动它的活动所在的堆栈中运行。比如活动A启动活动B(B是标准模式),那么B会进入A所在的栈。不知道读者有没有注意到,当我们用ApplicationCont:从活动上下文外部调用startActivity需要FLAG_ACTIVITY_TASK标志。这真的是你想要的吗?一个

相信大家对这句话都会比较熟悉,因为我们标准模式的Activity会默认进入启动它的Activity所属的任务。栈,但是对于非活动类型的上下文(比如ApplicationContext)没有所谓的任务栈,所以就有问题了。为了解决这个问题,要启动的活动指定了FLAG_ACTIVITY_TASK标志位,这样在启动时就会为他创建一个新的任务栈。此时,要启动的活动实际上是在singl:

栈顶重用模式。在这种模式下,如果一个新的Activity已经在任务堆栈的顶部,它将不会被重新创建,同时,它的onNewIntent方法将被调用。通过这个方法的参数,我们可以检索当前请求的信息。需要注意的是,这个活动的onCreate,onStart不会被系统调用。因为他没有。;如果新活动已经存在但不在栈顶,那么新活动将被重新创建。例如,假设当前栈中的情况是ABCD,其中ABCD是四个活动,A在栈底,D在栈顶。此时,假设D将重新启动。如果D的启动模式是singleTop,站栈里的情况还是ABCD。如果D的启动模式是标准的,那么D将被重新创建。

singTask:

堆栈重用模式,这是一种单实例模式。在这种模式下,只要活动存在于堆栈中,当活动多次启动时,就不会创建实例。和singTop一样,系统也会回调它的onNewIntent方法。具体来说,当一个具有singleTask模式的活动请求开始时,比如活动A,系统将首先寻找A想要的任务栈的存在。如果它不 t存在,红心会创建一个任务栈,然后创建A的一个实例,把A放入栈中。如果有A需要的栈,就看A在栈里有没有实例了。如果有实例,系统会将转移到堆栈顶部,并调用其onNewIntent方法。如果没有实例,它会创建一个A的实例并将A放入堆栈,并给出几个例子。

例如,任务堆栈S1的当前情况是ABC。此时,活动D请求以单任务模式开始,所需的任务堆栈是S2。由于没有S2和D的实例,系统将首先创建任务堆栈S2,然后创建D的一个实例将其堆栈在S2。另一种情况,假设D的所需任务栈是S1,其他情况同上,系统会直接创建D的一个实例,引入S1,因为S1已经存在。如果D需要的任务栈是S1,当前的任务栈S1是ABCD,根据栈内重用的原则,此时不会重新创建D,系统会将D切换到栈顶,调用其oNnNewIntent方法。同时由于默认clearTop的效果,栈中D上的所有活动都会被弹出,所以S1最后的情况是AD,比较特殊,这个情况后面会详细分析。

singleInstanc:

单实例模式,这是一种增强的单任务模式。除了singleTask的所有属性之外,它还强化了一点,即具有这种模式的活动只能在单个任务堆栈中,换句话说,例如,活动A是单实例模式。启动时,系统将创建一个新的任务堆栈用于创建。那么A在这个任务栈中是独立的。由于堆栈中的重用,后续请求不会创建新的活动,除非这个唯一的任务堆栈被系统销毁。

上面介绍了几种启动,这里需要指出一种情况。让 假设目前有两个任务堆栈。前台任务栈是AB,后台任务栈是CD。让 s假设CD的启动模式是singleTask,现在请求启动D,那么整个后台任务站都会切换到前台。这时候整个背单就会变成ABCD。当用户按下返回键时,列表中的活动会被逐一弹出,如图所示。

如果你请求的是C而不是D,情况就不一样了,如图。

如何设置启动模式?

可以通过清单文件进行设置。

或者用代码设置。

意向意向新意向()(这个,)(意向。flag _ activity _ n

安卓startActivityForResult怎么用?

1.调用这个方法可以从a跳到b,然后b调用finsh()后,会跳回a,在这个过程中可以传输数据。

2.在这整个过程中,需要三种方法,即:

startActivityForResult(Intent Intent,int resquestCode)

调用跳转到a中的b。

setResult(int resultCode,Intent data)

设置要传输的数据。然后调用finish()返回b。

onActivityForResult(int requestCode,int resultCode,Intent data)

调用进行数据处理。

3.其实百度一键就能找到。

活动 任务 模式 实例

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。