四大组件Activity启动

任务栈Task ,是一种用来放置Activity实例的容器,他是以栈的形式进行盛放,也就是所谓的先进后出,主要有2个基本操作:压栈和弹出,所以在其中只能根据压栈和弹出操作更改Activity的顺序。启动一个Application的时候,系统会为它默认创建一个对于的Task,用来放置根Activity。

Android软件开发学习Activity组件启动模式方法

 Activity启动模式

 在安卓中,Activity的启动模式分为四种,分别是:标准模式,栈顶复用模式,栈内复用模式,单例模式。

 1、standard 即标准模式,他是系统默认的启动方式,这个任务栈中可以有多个相同的Activity实例,多个相同Activity实例也可以分布在不同的任务栈中,这时候是谁启动他,他就和谁在一个任务栈中。这时候我们要联系到我们遇到过的一个常:android.util.AndroidRuntimeException:....,具体内容大家试试这样启动一个Activity就会出来,使用ApplicationContext启动一个standard模式的Activity。我们分析下,其实这个错误的出现就是因为默认模式下,被谁启动,activity就翻到那个任务栈中去,而全局的上下文对象是没有任务栈存在的,所以就会报错了。解决这个问题可以更改启动的上下文为某个activity对象,当然我们如果将被启动的activity设置他的标志位为FLAG_ACTIVITY_NEW_TASK 也同样可以,这时候就相当于把Activity改为了singleTask模式启动了。

 2、singleTop 即栈顶唯一模式,这种模式下,如果Activity位于任务栈的栈顶,那么此Activity不会被重新创建,也就是说 不会调用 生命周期中的 onCreate和onStart 方法,但是 会回调 另一个方法 onNewIntent ,这时候我们可以在这个回调方法里根据参数Intent intent进行自己的相关处理。如果新启动的Activity实例不存在,或者存在但是不是位于栈顶,那么和正常一样的创建它。

 3、singleTask 即栈内唯一,这个其实是一种单例模式,只要这个任务栈中存在Activity的实例,那么就不再创建它,而是直接复用其实例,这时候也会回调onNewIntent。这时候有个问题,这个实例如果不是在栈顶,那么它要到栈顶来,唯一途径就是把它之前的实例全部弹出,实际上就是说singleTask具有clearTop的效果。当然这是简单的说明,下面通过几个例子帮助大家更好的理解:

 例1.目前有S1任务栈中有ABC,这个时候要启动Activity D并且D是singleTask模式,其所需的任务栈为S2(之所以不是S1因为为他指定了affinity属性),这时候由于S2和D都不存在,所以会先创建任务栈S2,然后在创建实例D压入栈底。

 例2.情况和1相同,只是D所需任务栈同样是S1,这时候就只要创建D的实例并将其压入到栈S1中即可。

 例3.如果D所需的任务栈为S1,并且当前S1中的情况为ADBC,这时候D的实例存在了,那么会将BC出栈,剩下AD,这就是singleTask默认具有clearTop的效果

 4、singleInstance 单例模式,这是一种加强型的singleTask,他具有singleTask的所有特性,并且拥有一个独特的地方就是,他会单独占用一个任务栈,比如Activity A是singleInstance模式,那么启动他的时候,系统会为他单独创建一个任务栈将其压入,如果再次启动他,他已经存在了,那么就直接复用该任务栈。

 最后,需要提醒大家注意的一点就是TaskAffinity这个属性主要是与singleTask或者allowTaskReparenting属性配对使用,在其他情况下是没有意义的。

 Activity标志位

 Activity的标志位Flags有很多种,其效果也有很多,比如可以用来设定启动模式,可以用来影响运行状态,下面介绍几个常用的标志位:

 1、FLAG_ACTIVITY_NEW_TASK

 该标志位作用于指定Activity的singleTask启动模式一样。

 2、FLAGE_ACTIVITY_SINGLE_TOP

 该标志位的作用和指定Activity的singleTop效果一致。

 3、FLAGE_ACTIVITY_CLEAR_TOP

 此标记位的效果就有意思了,拥有它的Activity会将与他在同一个任务栈中之前Activity都出栈,这个标志通常和singleTask配合使用时,如果实例存在,就调用他的onNewIntent,并将他之上的其他实例都清除,但是如果拥有该标志位的Activity是默认启动模式standard,那么他会连同自己一起清除,然后再重新创建实例,这点要注意好,所以之前我们说了singleTask默认具有此标志的效果。

 Activity设置启动模式的方式

 在Android中,设置Activity的启动模式主要有以下两种方式:

 1、在XML文件中定义 android:launchMode="singleTask"

 2、在启动意图的时候设置:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

 上述这两种方式,在使用主要有以下两个区别:

 1、优先级

 优先级第二种大于第一种,当俩种方式同时存在的时候以第二种方式为准,第一种方式为辅。

 2、适用范围

 俩种方式也存在适用范围的区别,第一种方式无法直接为Activity设定FLAG_ACTIVITY_CLEAR_TOP标志的效果,而第二种方式无法直接设置出singleInstance模式的效果。

时间: 2024-11-05 14:53:16

四大组件Activity启动的相关文章

Android四大组件--Activity详解

Android四大组件--Activity详解 分类: android android应用android开发 本文的主要内容包括1.activity的建立.配置和使用:2.activity的跳转和传值:3.startActivityForResult:4.activity的生命周期. 1.activity的建立.配置和使用 Activity是一个应用中的组件,它为用户提供一个可视的界面,方便用户操作,比如说拔打电话.照相.发邮件或者是浏览地图等.每个activity会提供一个可视的窗口,一般情况

Android基础之四大组件---Activity

Android基础之四大组件-Activity 1.什么是Activity 2.Activity生命周期 3.Activity生命周期演示 4.Activity之间的通信 5.Activity之加载模式 6.Activity的栈式管理 1.什么是Activity? Activity是用户接口程序,它是Android应用程序的基本功能单元,它的主要功能是提供界面.Activity是Android的核心类,该类的全名是android.app.Activity.Activity相当于C/S程序中的窗体

Android开发四大组件--Activity详解

Android开发四大组件--Activity详解 - Android开发教程 Android开发的四大组件在开发中应用中是必不可少的,下面就来详解下四大组件之一Activity,总结自网络.Activty的生命周期的也就是它所在进程的生命周期. 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个Activity onCreate()——>

四大组件--Activity(一)

1.Activity简介(★★)Activity是Android 四大组件之一,它用于展示界面.Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务.Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过 setContentView(View)来显示指定控件.在一个android 应用中,一个 Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应.Activity之间通过Intent进行通信.

Android基础整理之四大组件Activity

最近准备系统的重新整理复习一下Android的各方面的知识,本着知识分享的原则,我就把梳理过程中一些东西给记录下来,权当一个学习笔记吧. 下面步入正题..... 什么是Activity Activity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互的界面.再进一步说,当我们拿起Android打开拨号功能,显示出拨号盘的界面其实就是一个Activity:当然,可以更大范围的

Android四大组件——Activity

Activity作为Android四大组件之一,也是其中最重要的一个组件.作为一个与用户交互的组件,我们可以把Activity比较成为windows系统上的一个文件夹窗口,是一个与用户交互的界面.再进一步说,当我们拿起Android打开拨号功能,显示出拨号盘的界面其实就是一个Activity:当然,可以更大范围的说,手机屏幕上显示的任何界面都是一个个Activity. 官方对Activity的描述 Activity是一个应用程序的组件,他在屏幕上提供了一个区域,允许用户在上面做一些交互性的操作,

Android 四大组件(Activity、Service、BroadCastReceiver、ContentProvider)

转载于:http://blog.csdn.net/byxdaz/article/details/9708491 http://blog.csdn.net/q876266464/article/details/19641251 Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,Broadcast Receiver广播接收器. 一.了解四大基本组件 Activity : 应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以

关于Android中的四大组件(Activity)

一.Activity简述 Activity是Android应用中负责与用户交互的组件.在应用中创建自己的Activity需要继承Activity或者继承Activity的 子类. public class TestActivity extends Activity { } 二.Activity的使用 从图1.1可以看出Activity间接继承了ContextThemeWrapper.ContextWrapper.Context.Object这些基类,因此 Activity可以直接调用它们的方法.

Android 四大组件------Activity

一.定义软件打开的主activity 当用户点开软件时,系统会默认调用app中声明为"launch"(或者"main")的activity中的onCreate()方法.我们一般在AndroidManifest.xml中定义主activity. <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-fil