Android四大组件的详细讲解
- 格式:doc
- 大小:204.00 KB
- 文档页数:31
android开发面试题目在进行Android开发面试前,我们需要对一些常见的面试题目进行准备,以提升自己的面试表现。
以下是一些常见的Android开发面试题目,供参考。
1. 介绍一下Android的四大组件?Android的四大组件分别是Activity、Service、Broadcast Receiver和Content Provider。
- Activity用于构建用户界面,处理用户交互,一个应用程序通常包含多个Activity。
- Service是一种后台运行的组件,用于执行长时间运行的操作,不与用户界面进行交互。
- Broadcast Receiver用于接收系统或其他应用程序发出的广播消息,并做出相应的处理。
- Content Provider用于管理应用程序的数据,并提供对外部应用程序的访问权限。
2. 什么是Manifest文件?它的作用是什么?Manifest文件是每个Android应用程序必须具备的一个XML文件,位于应用程序的根目录。
它记录了应用程序的各种配置信息,包括应用程序的包名、权限声明、组件声明等。
Manifest文件的作用是向系统描述应用程序的结构和组件,系统通过解析Manifest文件来了解应用程序并进行相应的操作,如启动Activity、分配权限等。
3. 什么是Intent?它的作用是什么?Intent是Android应用程序之间进行通信的一种机制。
它分为两种类型:显式Intent和隐式Intent。
- 显式Intent用于指定明确的目标组件,用于在应用程序内部进行页面跳转。
- 隐式Intent没有明确指定目标组件,通过设置相应的过滤条件来匹配合适的组件,可用于跳转到其他应用程序的页面或请求系统提供特定的服务。
Intent的作用是触发组件之间的交互,并且可以使用Intent传递数据、启动Activity、启动Service、发起Broadcast等。
4. 什么是Activity生命周期?请介绍各个生命周期方法。
Activity生命周期以及四大组件Android四大基本组件分别是Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器。
一:了解四大基本组件Activity :应用程序中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。
Activity之间通过Intent进行通信。
在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。
典型的动作类型有:M AIN(activity的门户)、VIEW、PICK、EDIT 等。
而动作对应的数据则以URI 的形式进行表示。
例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW 的intent,以及一个表示这个人的URI。
与之有关系的一个类叫IntentFilter。
相对于intent 是一个有效的做某事的请求,一个intentfilter 则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。
一个activity 如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表示一个人的URI。
IntentFilter 需要在AndroidManifest.xml 中定义。
通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。
当向前导航时,activity 将会调用startActivity(Intent myIntent)方法。
然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最匹配myIntent 的Intent 对应的activity。
新的activity 接收到myIntent 的通知后,开始运行。
当startActivity 方法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
Android开发中,Activity是四大组件之一,也是Android开发入门初学者必须重点掌握的内容之一,而要掌握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进行自己的相关处理。
Android平台下的四大组件详解之ActivitiesAndroid平台首先就是其开放性,开放的平台允许任何移动终端厂商加入到Android联盟中来。
显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开放性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。
Android 手机操作系统是一款开源的系统。
对编程有所了解的朋友们可以通过各种编写方式来使这款系统应用于手机中来满足各种需求。
下面我们将会对Android组件的一些概念进行一个总结,以方便大家的学习。
Android的一个核心特性就是,一个应用程序能利用另外应用程序的元素(假如这些应用程序允许这样做)。
举个例子,如果你的程序需要展示一个可以滚动的图片列表,正好有另外一个程序已经有这样一个合适的滚动条并且也允许其他程序使用,那么你就可以使用这个滚动条来完成你的工作,而不是开发你自己的。
你的应用不需要内含其他应用的代码或者连接到他。
相反,它只是简单的启动了需要的部分。
为了让这个特性能够工作,系统必须能够实现运行一个部分组件被需要的应用,并为那个部分实例化一个Java对象。
因此,与大多数系统上的应用不一样,Android应用没有为应用中的任何部分提供一个单一的入口(比如说,没有main()函数)。
相反的,他们用系统能实例和运行的本质组件。
下面我们将介绍Android4大组件之Activities一个活动为一个具有焦点、用户可以操作的行为展示了一个可视化的用户接口。
举例,一个活动可以展示一个用户可以选择的菜单选项列表,或者展示有字幕的照片。
一个文字短信应用可能有一个用来展示可以选择发送短信联系人列表的活动,一个用来给这个选择的联系人写短信的活动,其他用来查看以前的短信和改变设置的一些活动。
虽然他们一起工作,构成了一个联系紧密的用户接口,每一个活动相对于其他活动却是独立的。
Android平台下的四大组件详解之Content providersAndroid的一个核心特性就是,一个应用程序能利用另外应用程序的元素(假如这些应用程序允许这样做)。
举个例子,如果你的程序需要展示一个可以滚动的图片列表,正好有另外一个程序已经有这样一个合适的滚动条并且也允许其他程序使用,那么你就可以使用这个滚动条来完成你的工作,而不是开发你自己的。
你的应用不需要内含其他应用的代码或者连接到他。
相反,它只是简单的启动了需要的部分。
为了让这个特性能够工作,系统必须能够实现运行一个部分组件被需要的应用,并为那个部分实例化一个Java对象。
因此,与大多数系统上的应用不一样,Android应用没有为应用中的任何部分提供一个单一的入口(比如说,没有main()函数)。
相反的,他们用系统能实例和运行的本质组件。
下面我们将介绍Android4大组件之Content providers内容提供者提供了一套特殊的可供其他应用使用的数据。
这些数据可以存储在文件系统中,SQLite数据库中,或者其他有意义的形式。
内容提供者继承于ContentProvider基类,实现了一套标准的允许其他用户检索,储存数据的方法。
但是,应用程序并不能直接使用这些方法。
他们必须使用ContentProvider的实例,调用它的方法。
ContentResolver可以与任何内容提供者交流,他们之间的合作可以管理进程间的通信。
不管什么时候有一个需要被一个特殊的Android组件处理的请求,Android 确保这个应用组件的进程在运行中,如果有需要就启动它,确保组件的合适的实例是可用的,如有需要就实例化它。
原文:3G开发者论坛/bbs/forum.php?mod=viewthread&tid=13288&fromuid=1 609。
Android移动应用的组件和模式设计Android移动应用的组件和模式设计是移动应用开发中非常重要的一项工作。
良好的组件和模式设计可以使得应用程序更加稳定、更易于维护和扩展,同时也可以提升用户体验。
一、Android应用程序的四大组件Android应用程序的架构采用了组件化的设计思想,将应用程序分为四大组件:Activity、Service、BroadcastReceiver和ContentProvider。
1. ActivityActivity是Android应用程序中最主要的组件之一,它代表了应用程序的一个屏幕或者一个界面。
每个屏幕都对应一个Activity,用户通过与Activity进行交互来使用应用程序的功能。
Activity可以接收用户的输入事件,处理界面更新和交互逻辑等。
2. ServiceService是运行在后台的组件,可以执行一些长时间运行的任务,例如播放音乐、下载数据等。
Service没有界面,运行在后台,因此用户并不能直接与之交互。
Service通常是非常耗费资源的,因此需要仔细考虑它的生命周期和资源管理问题。
3. BroadcastReceiverBroadcastReceiver是用来接收广播消息的组件,可以在系统和其他应用程序之间进行通信。
BroadcastReceiver可以接收系统级别的广播消息(例如设备电量低的通知、应用程序安装卸载的通知等)和应用程序之间的广播消息(例如自定义的AAA消息等)。
4. ContentProviderContentProvider是用来管理应用程序数据的组件,可以让不同的应用程序之间共享数据。
ContentProvider负责数据的读取、写入和删除等操作,可以对外提供丰富的操作接口。
二、常用的组件模式在Android应用程序的开发过程中,开发者常常需要使用一些组件模式来解决特定的问题。
下面介绍几种常用的组件模式。
1. 观察者模式观察者模式是一种广泛使用的设计模式,可以将对象之间的消息传递进行解耦。
Android组件应用构成的详细讲解在一个Android应用中,主要是由四种组件组成的,这四种组件可参考“Android应用的构成”。
而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。
在这些组件之间的通讯中,主要是由Intent协助完成的。
Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将Intent传递给调用的组件,并完成组件的调用。
因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
例如,在一个联系人维护的应用中,当我们在一个联系人列表屏幕(假设对应的Activity为listActivity)上,点击某个联系人后,希望能够跳出此联系人的详细信息屏幕(假设对应的Activity为detailActivity) 为了实现这个目的,listActivity需要构造一个Intent,这个Intent用于告诉系统,我们要做“查看”动作,此动作对应的查看对象是“某联系人”,然后调用startActivity (Intent intent),将构造的Intent传入,系统会根据此Intent中的描述,到ManiFest中找到满足此Intent要求的Activity,系统会调用找到的Activity,即为detailActivity,最终传入Intent,detailActivity则会根据此Intent中的描述,执行相应的操作。
一、抽象描述要描述什么在Android参考文档中,对Intent的定义是执行某操作的一个抽象描述(确实很抽象)。
我们先来看看这里的抽象描述,到底描述了什么。
首先,是要执行的动作(action)的一个简要描述,如VIEW_ACTION(查看)、EDIT_ACTION(修改)等,Android为我们定义了一套标准动作:MAIN_ACTIONVIEW_ACTIONEDIT_ACTIONPICK_ACTIONGET_CONTENT_ACTIONDIAL_ACTIONCALL_ACTIONSENDTO_ACTIONANSWER_ACTIONINSERT_ACTIONDELETE_ACTIONRUN_ACTIONLOGIN_ACTIONCLEAR_CREDENTIALS_ACTIONSYNC_ACTIONPICK_ACTIVITY_ACTIONWEB_SEARCH_ACTION此外,我们还可以根据应用的需要,定义我们自己的动作,并可定义相应的Activity来处理我们的自定义动作。
Android四大组件一、Activity1、Activity的四种启动模式:standard、singleTop、singleTask、singleInstance设置选择方式:在AndroidManifest.xml文件中通过给<activity>标签的android:launchMode属性来选择启动模式。
(1)Standard分析:这种模式是默认的模式,每当我们启动一个新的Activity时,它都会创建该活动的一个新的实例,不会在意所创建的Activity是否已经创建过(存在返回栈中),按返回键时需要一次一次的关闭之前所创建过的Activity的实例。
(2)singleTop分析:这种模式在启动Activity时如果发现返回栈的栈顶已经是该Activity,则认为可以直接使用它,而不会创建新的Activity的实例。
(但是,需要注意的是,如果我们需要创建的Activity已经存在,但是并没有在栈顶,这时候,它还是会创建该Activity的实例)(3)singleTask分析:这种模式它在我们想要创建新的Activity的实例的时候,会先去返回栈中检查我们即将要创建的Activity是否已经创建过(也就是说每个Activity只能存在一个实例,不能重复)。
(4)singleInstance分析:当我们需要将程序中的一个Activity共享给别的应用的时候,我们就必须采用这种模式,这种模式的活动会启用一个新的返回栈来管理这个活动2、使用Intent进行不同Activity之间的切换(1)显式Intent首先我们要注意的是,每当我们创建一个新的Activity时,我们应该总是首先去AndroidManifest.xml文件中注册它,下面是非主活动的注册声明:<activity android:name=”.SecondActivity”></activity>使用以下语句从FirstActivity切换到SecondActivity中去:Intent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivity(intent);(2)隐式Intent使用隐式的Intent方法来切换Activity我们需要在注册声明新的Activity时,加入以下的语句:<activity android:name=”.SecondActivity”><intent-filter<action android:name=”com.example.activitytest.ACTION_START”/><categoryandroid:name=”android:intent.category.DEFAULT”/> </intent-filter</activity>然后就可以用以下语句进行切换Intent intent = new Intent(“com.example.activitytest.ACTION_START”); startActivity(intent);应该注意的是每个Intent只能指定一个action,但却可以指定多个category更多Intent隐式的用法:(以下是打开百度网页的方法)Intent intent = new Intent(Intent.ACTION_VIEW);Intent.setData(Uri.parse(“”));二、Service1、异步消息处理机制Android是不允许在子线程中进行UI操作的,这时我们引入一种异步消息处理机制来解决这种问题,以下就是异步消息处理机制:new Thread(new Runnable() {@Overridepublicvoid run() {// text.setText("jgshkjheuih");//上面本来在线程进行UI操作时出错,现在改成这样Message message = new Message();message.what = UPDATE_TEXT;handler.sendMessage(message);}}).start();private Handler handler = new Handler(){publicvoid handleMessage(Message msg){switch (msg.what) {case UPDATE_TEXT:text.setText("gslgslgs");break;default:break;}}};2、AsyncTask基本用法(不太懂)AsyncTask是一个抽象类,所以我们必须创建一个子类去继承它,继承时我们需要指定三个泛型参数,用途如下:Params:在执行AsyncTask时需要传入的参数,可用于在后台任务中使用Progress:后台任务执行时,如果需要在界面上显示当前的进度,则使用这里指定的泛型作为进度单位Result:当任务执行完毕后,如果需要对结果进行返回,则使用这里指定的泛型作为返回值类型因此,一个简单的的自定义的AsyncTask就可以写成如下方式:Class DownloadTask extends AsyncTask<Void, Integer, Boolean>{……}目前我们自定义的DownloadTask还是一个空任务,不能进行任何实际的操作,所以我们还要重写下面的几个方法:onPreExecute()这个方法会在后台任务开始执行之前调用,用于进行一些界面上的初始化操作,比如显示一个进度条对话框等。
Android应用程序由一些零散的有联系的组件组成,通过一个工程manifest绑定在一起。在manifest中,描述了每一个组件以及组件的作用,其中有6个组件,它们是Android应用程序的基石:
Activities(活动) 应用程序的显示层。每一个画面对应于你的应用程序,将会是Activity类的扩展。Activity使用Views去构建UI来显示信息和响应用户的行为。就桌面开发而言,一个Activity相当于一张Form。你在这章中将会学习到更多关于Activities。
Services(服务) Android应用程序中不可见的“工人”。 Service组件运行时不可见,但它负责更新的数据源和可见的Activity,以及触发通知。它们常用来执行一些需要持续运行的处理,当你的 Activity已经不处于激活状态或不可见。你将在第8章学习怎样创建Service。
Content(内容) 提供共享的数据存储。Content Provider(内容提供器)用来管理和共享应用程序的数据库。在应用程序间,Content Provider是共享数据的首选方式。这意味着,你可以配置自己的Content Provider去存取其他的应用程序或者通过其他应用程序暴露的Content Provider去存取它们的数据。Android设备本身包含了几个Content Provider来访问像联系人信息等有用的数据库。你将在第6章学习怎样创建和使用Content Provider。
Intents(意图) 简单的消息传递框架。使用Intent,你可以在整个系统内广播消息或者给特定的Activity或者服务来执行你的行为意图。系统会决定那个(些)目标来执行适当的行为。
Broadcast Receivers(广播接收器) Intent广播的“消费者”。通过创建和注册一个Broadcast Receiver,应用程序可以监听符合特定条件的广播的Intent。Broadcast Receiver 会自动的启动你的Android应用程序去响应新来的Intent。Broadcast Receiver是事件驱动程序的理想手段。
Notifications(通知) 用户通知的框架。Notification用来在不需要焦点或不中断它们当前Activity的情况下提示用户。它们是Service或 Broadcast Receiver获得用户注意的首选方式。例如,当设备收到文本信息或外部来电时,它通过闪光,发声,显示图标或显示对话框信息来提醒你。在第8章里,你可以使用Notification来触发这些事件。
一、Activity详解 Activty的生命周期的也就是它所在进程的生命周期。 一个Activity的启动顺序: onCreate()——>onStart()——>onResume() 当另一个Activity启动时: 第一个Activity onPause()——>第二个ActivityonCreate()——>onStart()——>onResume() ——>第一个ActivityonStop()
当返回到第一个Activity时: 第二个Activity onPause()——>第一个Activity onRestart()——>onStart()——>onResume() ——>第二个Activity onStop()——>onDestroy() 一个Activity的销毁顺序: (情况一)onPause()——>
(情况二)onPause()——>onStop()——> (情况三)onPause()——>onStop()——>onDestroy()
每一个活动( Activity )都处于某一个状态,对于开发者来说,是无法控制其应用程序处于某一个状态的,这些均由系统来完成。
但是当一个活动的状态发生改变的时候,开发者可以通过调用 onXX() 的方法获取到相关的通知信息。
在实现 Activity 类的时候,通过覆盖( override )这些方法即可在你需要处理的时候来调用。
一、 onCreate :当活动第一次启动的时候,触发该方法,可以在此时完成活动的初始化工作。 onCreate 方法有一个参数,该参数可以为空( null ),也可以是之前调用 onSaveInstanceState ()方法保存的状态信息。 二、 onStart :该方法的触发表示所属活动将被展现给用户。 三、 onResume :当一个活动和用户发生交互的时候,触发该方法。 四、 onPause:当一个正在前台运行的活动因为其他的活动需要前台运行而转入后台运行的时候,触发该方法。这时候需要将活动的状态持久化,比如正在编辑的数据库记录等。 五、 onStop :当一个活动不再需要展示给用户的时候,触发该方法。如果内存紧张,系统会直接结束这个活动,而不会触发 onStop 方法。 所以保存状态信息是应该在onPause时做,而不是onStop时做。活动如果没有在前台运行,都将被停止或者Linux管理进程为了给新的活动预留足够的存储空间而随时结束这些活动。因此对于开发者来说,在设计应用程序的时候,必须时刻牢记这一原则。在一些情况下,onPause方法或许是活动触发的最后的方法,因此开发者需要在这个时候保存需要保存的信息。 六、onRestart :当处于停止状态的活动需要再次展现给用户的时候,触发该方法。 七、 onDestroy:当活动销毁的时候,触发该方法。和 onStop 方法一样,如果内存紧张,系统会直接结束这个活动而不会触发该方法。 · onSaveInstanceState :系统调用该方法,允许活动保存之前的状态,比如说在一串字符串中的光标所处的位置等。 通常情况下,开发者不需要重写覆盖该方法,在默认的实现中,已经提供了自动保存活动所涉及到的用户界面组件的所有状态信息。
Activity栈 上面提到开发者是无法控制Activity的状态的,那Activity的状态又是按照何种逻辑来运作的呢?这就要知道 Activity 栈。 每个Activity的状态是由它在Activity栈(是一个后进先出LIFO,包含所有正在运行Activity的队列)中的位置决定的。
当一个新的Activity启动时,当前的活动的Activity将会移到Activity栈的顶部。 如果用户使用后退按钮返回的话,或者前台的Activity结束,活动的Activity就会被移出栈消亡,而在栈上的上一个活动的Activity将会移上来并变为活动状态。如下图所示:
一个应用程序的优先级是受最高优先级的Activity影响的。当决定某个应用程序是否要终结去释放资源,Android内存管理使用栈来决定基于Activity的应用程序的优先级。
Activity状态 一般认为Activity有以下四种状态: 活动的:当一个Activity在栈顶,它是可视的、有焦点、可接受用户输入的。Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用。当另外一个Activity被激活,这个将会被暂停。 暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了。有可能原因是一个透明或者非全屏的Activity被激活。 当被暂停,一个Activity仍会当成活动状态,只不过是不可以接受用户输入。在极特殊的情况下,Android将会杀死一个暂停的Activity来为活动的Activity提供充足的资源。当一个Activity变为完全隐藏,它将会变成停止。 停止:当一个Activity不是可视的,它“停止”了。这个Activity将仍然在内存中保存它所有的状态和会员信息。尽管如此,当其它地方需要内存时,它将是最有可能被释放资源的。当一个Activity停止后,一个很重要的步骤是要保存数据和当前UI状态。一旦一个Activity退出或关闭了,它将变为待用状态。 待用: 在一个Activity被杀死后和被装在前,它是待用状态的。待用Acitivity被移除Activity栈,并且需要在显示和可用之前重新启动它。 activity的四种加载模式 在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。 在android里,有4种activity的启动模式,分别为: ·standard: 标准模式,一调用startActivity()方法就会产生一个新的实例。 ·singleTop: 如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例,而只是调用Activity中的newInstance()方法。如果不位于栈顶,会产生一个新的实例。 ·singleTask: 会在一个新的task中产生这个实例,以后每次调用都会使用这个,不会去产生新的实例了。 ·singleInstance: 这个跟singleTask基本上是一样,只有一个区别:在这个模式下的Activity实例所处的task中,只能有这个activity实例,不能有其他的实例。 这些启动模式可以在功能清单文件AndroidManifest.xml中进行设置,中的launchMode属性。 相关的代码中也有一些标志可以使用,比如我们想只启用一个实例,则可以使用 Intent.FLAG_ACTIVITY_REORDER_TO_FRONT 标志,这个标志表示:如果这个activity已经启动了,就不产生新的activity,而只是把这个activity实例加到栈顶来就可以了。
Intent intent = new Intent(ReorderFour.this, ReorderTwo.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); startActivity(intent);
复制代码
Activity的加载模式受启动Activity的Intent对象中设置的Flag和manifest文件中Activity的元素的特性值交互控制。 下面是影响加载模式的一些特性 核心的Intent Flag有: FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_RESET_TASK_IF_NEEDED FLAG_ACTIVITY_SINGLE_TOP