博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Activity中的四种启动模式
阅读量:4160 次
发布时间:2019-05-26

本文共 2081 字,大约阅读时间需要 6 分钟。

Activity启动方式有四种,分别是:

standard
singleTop
singleTask
singleInstance
可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题。
设置Activity的启动模式,只需要在AndroidManifest.xml里对应的<activity>标签设置android:launchMode属性,例如:

[html] 

  1. <activity  
  2.     android:name=".A1"  
  3.     android:launchMode="standard" />  

下面是四种模式的作用:
standard
模式,可以不用写配置。在个模式下,都会默认创建一个新的例。因此,在种模式下,可以有多个相同的例,也允多个相同Activity叠加。
例如:
若我有一个ActivityA1, 上面有一个按可跳A1。那么如果我点,便会新启一个Activity A1叠在才的A1之上,再点,又会再新启一个在它之上……
back键会依照栈顺序依次退出。
singleTop
可以有多个例,但是不允多个相同Activity叠加。即,如果Activity栈顶候,启相同的Activity,不会建新的例,而会用其onNewIntent方法。
例如:
若我有两个ActivityB1,B2,两个Activity内容功能完全相同,都有两个按可以跳到B1或者B2,唯一不同的是B1standardB2singleTop
若我意打开的B1->B2->B2则实际打开的B1->B2(后一次意打开B2实际用了前一个的onNewIntent方法)
若我意打开的B1->B2->B1->B2则实际打开的序与意的一致,B1->B2->B1->B2
singleTask
只有一个例。在同一个用程序中启他的候,若Activity不存在,会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并用它的onNewIntent方法。
如果是在用程序中启它,会新建一个task,并在task中启动这ActivitysingleTask许别Activity与其在一个task中共存,也就是,如果我在singleTask例中再打开新的Activity个新的Activity还是会在singleTask例的task中。
例如:
若我的用程序中有三个Activity,C1,C2,C3,三个Activity可互相启,其中C2singleTask模式,那么,无我在个程序中如何点,如:C1->C2->C3->C2->C3->C1-C2C1,C3可能存在多个例,但是C2只会存在一个,并且三个Activity都在同一个task里面。
但是C1->C2->C3->C2->C3->C1-C2这样的操作实际应该是如下这样的,因singleTask会把task中在其之上的其它Activity destory掉。
操作:C1->C2          C1->C2->C3          C1->C2->C3->C2            C1->C2->C3->C2->C3->C1             C1->C2->C3->C2->C3->C1-C2
实际:C1->C2          C1->C2->C3          C1->C2                              C1->C2->C3->C1                               C1->C2
若是用程序打开C2会新启一个task
Other中有一个activitytaskId200,从它打开C2C2taskIdI不会200,例如C2taskId201,那么再从C2打开C1C3C2C3taskId201
注意:如果此你点home,然后再打开Other发现这时显示的肯定会是Other应用中的内容,而不会是我们应用中的C1 C2 C3中的其中一个。
singleInstance
只有一个例,并且例独立运行在一个task中,task只有例,不允Activity存在。
例如:
程序有三个ActivityD1,D2,D3,三个Activity可互相启,其中D2singleInstance模式。那么程序从D1开始运行,假D1taskId200,那么从D1D2时,D2会新启一个task,即D2D1不在一个task中运行。假D2taskId201,再从D2D3时,D3taskId200,也就是它被到了D1的任务栈中。
若是在用程序打开D2,假OthertaskId200,打开D2D2会新建一个task运行,假它的taskId201,那么如果这时再从D2D1或者D3又会再建一个task,因此,若操作步骤为other->D2->D1这过程就涉及到了3task了。

 

转载地址:http://nedxi.baihongyu.com/

你可能感兴趣的文章
CMFCRibbonStatusBar用法
查看>>
CMFCControlRendererInfo类的参数
查看>>
史上最详细MFC调用mapX5.02.26步骤(附地图测试GST文件)
查看>>
CMFCShellListCtrl使用方法
查看>>
mapnik的demo运行
查看>>
python支持下的mapnik安装
查看>>
milvus手册
查看>>
查看pytorch基于cuda 的哪个版本
查看>>
多目标跟踪的简单理解
查看>>
Near-Online Multi-target Tracking with Aggregated Local Flow Descriptor
查看>>
Joint Tracking and Segmentation of Multiple Targets
查看>>
Subgraph Decomposition for Multi-Target Tracking
查看>>
JOTS: Joint Online Tracking and Segmentation
查看>>
CDT: Cooperative Detection and Tracking for Tracing Multiple Objects in Video Sequences
查看>>
Improving Multi-frame Data Association with Sparse Representations for Robust Near-online Multi-ob
查看>>
Virtual Worlds as Proxy for Multi-Object Tracking Analysis
查看>>
Multi-view People Tracking via Hierarchical Trajectory Composition
查看>>
Online Multi-Object Tracking via Structural Constraint Event Aggregation
查看>>
The Solution Path Algotithm for Identity-Aware Multi-Object Tracking
查看>>
Groupwise Tracking of Crowded Similar-Appearance Targets from Low-Continuity Image Sequences
查看>>