第五章 Activity与Intent_第1页
已阅读1页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五章第五章 ActivityActivity与与Intent Intent 倚动软件工厂实验室倚动软件工厂实验室 主要内容主要内容 主要内容主要内容 主要内容主要内容 什么是什么是ActivityActivity u Android中主要包含四大组件:Activity、Service、 BroadcastReceiver、ContentProvider。其中Activity是 最基础也是最常见的组件。 uActivity负责与用户交互负责与用户交互,该组件提供了一个显示用户 界面的屏幕,用户通过与这个屏幕交互可完成一定的功能, 例如打电话,拍照,发送邮件或者查看地图等。 u每一个Activi

2、ty都提供了一个可视化的用户界面。通过 setContentView()方法来设定界面显示内容。这个界面通 常是充满整个屏幕充满整个屏幕,但可通过设置使这个屏幕更小或者是 漂浮在其他界面窗口之上漂浮在其他界面窗口之上。 什么是什么是ActivityActivity u 一个应用程序通常由多个彼此之间松耦合的Activity组成。 通常,有一个Activity被指定为主Activity。当应用程序第一次启 动的时候,该Activity会显示给用户。 u每个Activity都可以启动其他Activity用于执行不同的动作(功 能)。当一个新的Activity启动的时候,先前的那个Activity就

3、会 停止停止,但是系统会在堆栈堆栈中保存该Activity。 u堆栈遵循后进先出后进先出的队列原则,因此,当用户使用完当前的 Activity并按Back键时,该Activity将从堆栈中取出(并销毁,销毁, 释放内存空间释放内存空间),然后先前的Activity恢复并获取焦点。 创建和配置创建和配置Activity u 建立自己的Activity需要继承Activity基类或其子类,例 如ListActivity、TabActivity。 u 创建Activity需要实现一个或多个方法,其中最常见的 就是onCreate(Bundle status)方法,该方法将会在 Activity创建时

4、被回调,并可调用setContentView(View view)方法来显示要展示的View。 u 为了管理应用程序界面中的各个组件,需调用Activity 的findViewById(int id)方法来获取程序界面中的组件,接 下来去修改个组件的属性和方法即可。 创建和配置创建和配置Activity u 当用户离开Activity时,系统将会自动调用onPause()方法, 但这并不意味这该Activity被销毁了。在该方法中,应该实现 一些需要持久化的功能,因为用户可能不会再返回该Activity, 该进程可能会被杀死。 Android应用要求四大组件都必须显示进行注册。应用要求四大组件

5、都必须显示进行注册。 创建和配置创建和配置Activity 为为元素添加元素添加子元素即可注册子元素即可注册 Activity。注册时,主要有以下几个属性: name:指定该Activity的实现类的类名; icon:指定该Activity对应的图标; label:指定该Activity的标签。 配置Activity时通常还可以指定一个或多个 元素,该元素用于指定该Activity可响应的Intent。 上述配置中,只有上述配置中,只有name属性是必须的,而其它属性或标属性是必须的,而其它属性或标 签元素都是可选的签元素都是可选的(演示演示-解释解释name不同不同)。 启动启动Activi

6、ty 一个Android应用通常只有一个Activity会作为程序的入口。 而应用中的其他Activity,通常都由入口Activity启动,或由入 口Activity启动的Activity启动。 Activity启动其他Activity的方法如下: startActivity(Intent intent):启动其他Activity; startActivityForResult(Intent intent,int requestCode):程 序将会得到新启动Activity的结果(通过重写onActivityResult ()方法来获取),requestCode参数代表启动Activity

7、的请 求码。这个请求码的值由开发者根据业务自行设置,用于标识 请求来源。 查看activity相关帮助文档 启动启动Activity p上面两个方法,都需要传入一个Intent类型的参数,该参 数是对你所需要启动的Activity的描述,既可以是一个确切 的Activity类,也可以是所需要启动的Activity的一些特征, 然后由系统查找符合该特征的Activity。 p如果有多个Activity符合该要求时,系统将会以下拉列表 的形式列出所有的Activity,然后由用户选择具体启动哪一 个,这些Activity既可以是本应用程序的,也可以是其他应 用程序的。 pIntent一般格式: I

8、ntent intent = new Intent(this,OtherActivity.class) 关闭关闭Activity 注意:注意:大部分情况下,不建议显式调用这些方法关闭 Activity。因为Android系统会为我们管理Activity的生命周 期,调用这些方法可能会影响用户的预期体验。因此,只 有当你不想用户再回到当前Activity的时候才去关闭它。 u finish()finish():结束当前结束当前ActivityActivity; u finishActivity(int requestCode)finishActivity(int requestCode):结束以

9、结束以 startActivityForResultstartActivityForResult(Intent intentIntent intent,int int requestCoderequestCode)方法启动的)方法启动的ActivityActivity。 一个包括名称、标题、启动、结束的一个包括名称、标题、启动、结束的Activity例子演示例子演示 Activity的生命周期的生命周期 整个生命周期整个生命周期(onCreate-onDestroy) 可见生命周期可见生命周期(onStart-onStop) 前台生命周期前台生命周期(onResume-onPause) Act

10、ivity的三个主要状态 Resumed:Resumed:已恢复状态,此时已恢复状态,此时ActivityActivity位于前台,并获得焦位于前台,并获得焦 点,该状态也称为运行时状态。点,该状态也称为运行时状态。 Paused:Paused:暂停状态,其他暂停状态,其他ActivityActivity获得焦点,该获得焦点,该ActivityActivity仍仍 可见,即仍存在于内存中,保存着自身状态,与窗口管理器保可见,即仍存在于内存中,保存着自身状态,与窗口管理器保 持联系,但如果系统内存极度匮乏时,可能会被杀死。持联系,但如果系统内存极度匮乏时,可能会被杀死。 Stopped:Stop

11、ped:停止状态,该停止状态,该ActivityActivity完全被其他完全被其他ActivityActivity 覆盖,覆盖, 即仍存在于内存中,保存着自身状态,与窗口管理器失去联系,即仍存在于内存中,保存着自身状态,与窗口管理器失去联系, 系统在需要内存时,可以随时杀死该系统在需要内存时,可以随时杀死该ActivityActivity 。 查看文档查看文档 整个生命周期整个生命周期 从从onCreate()onCreate()开始到开始到onDestroy()onDestroy()结束。结束。ActivityActivity在在 onCreate()onCreate()进行初始化,设置所

12、有的进行初始化,设置所有的“全局全局”状态,在状态,在 onDestory()onDestory()释放所有的资源。释放所有的资源。 例如:某个例如:某个ActivityActivity有一个在后台运行的线程,用于从有一个在后台运行的线程,用于从 网络下载数据,则该网络下载数据,则该ActivityActivity可以在可以在onCreate()onCreate()中创建该中创建该 线程线程, ,在在onDestory()onDestory()中停止该线程。中停止该线程。 可见生命周期可见生命周期 u 从onStart()开始到onStop()结束。在这段时间,可以看 到Activity在屏幕

13、上,尽管有可能不在前台,不能和用户交 互。在这两个方法之间,需要保持显示给用户的UI数据和 资源等。 u 例如:例如:可以在onStart中注册一个IntentReceiver来监听 数据变化导致UI的变动,当不再需要显示时候,可以在 onStop()中注销它。onStart(),onStop()都可以被多次调 用,因为Activity随时可以在可见和隐藏之间转换。 前台生命周期前台生命周期 n 从onResume()开始到onPause()结束。在这段时间里, 该Activity处于所有 Activity的最前面,和用户进行交互。 n Activity可以经常性地在resumed和pause

14、d状态之间切换。 例如:当设备准备休眠时、当一个 Activity处理结果被分发 时、当一个新的Intent被分发时。所以在这些方法中的代码 应该属于非常轻量级(与系统交互调用较少)的。 Activity的生命周期的生命周期 问题与讨论问题与讨论 1、若用户直接按Home键,返回到桌面,该Activity是否还 存在? 2、用户按Back键返回与在其他Activity中添加一个跳转到 MainActivity之间返回有什么区别?(在OtherActivity中添 加返回按钮处理事件) 案例:案例:模拟Activity生命周期中方法的调用。重写Activity生 命周期中的方法,方法调用时,在控

15、制台打印出相应的信息, 根据信息查看方法调用顺序(singleinstance)。 Activity间交换数据间交换数据 n 当一个Activity启动另一个Activity时,常常会 有一些数据需要传过去,Intent就是它们之间的 信使,主要是将需要交换的数据放入Intent即可。 n 数据传递的方向有两个:一个是从当前 Activity传递到新启动的Activity,另一个则是从 新启动的Activity返回结果到当前Activity。 启动其他启动其他Activity并返回结果并返回结果 1、为了获取被启动的Activity所返回的结果,可以采 用startActivityForRes

16、ult(Intent intent,int requestCode)启动 新Activity,并且当前Activity需要重写 onActivityResult(int requestCode, int resultCode,Intent intent)方法。 2、被启动的Activity 执行结束前,调用自身的 setResult(int resultCode,Intent intent)方法,将需 要返回的结果写入到Intent中。执行步骤 请求码与结果码的作用请求码与结果码的作用 n在一个Activity中,可能存在多个控件,每个控件 都可能会调用startActivityForResu

17、lt()方法,从而可 能打开多个不同的Activity处理不同的业务。但这些 Activity关闭后,都会调用先前的Activity的 onActivityResult()方法。通过请求码,我们就知道 该方法由哪个控件所触发,通过结果码,我们就知 道返回的数据来自于哪个Activity。 Intent保存数据的方法保存数据的方法 n Intent提供了多个重载方法来存放需要携带的 数据,格式如下: nputExtras(String name,XXX data):其中XXX代 表数据类型,如int,long,String等。 nputExtras(Bundle data):向intent中放入

18、一个 简单的数据携带包,该类提供了多个方法来存入 数据。(查看Bundle) 用户注册案例用户注册案例 用户注册案例用户注册案例 运行界面分析运行界面分析 用用 户户 注注 册册 程程 序序 分分 析析 用户注册案例用户注册案例 例子例子 BundleTest例子演示例子演示(男女选项男女选项)1 查看查看RegisterTest例子,并完善程序例子,并完善程序 (gender部分,部分,if部分部分) 1 2 Intent详解详解 什么是什么是Intent? Android应用程序中,有三种核心组件:Activity, Service,BroadcastReceiver,它们是独立的,可以互

19、 相调用,协调工作,最终组成一个真正的Android应用。 这些组件的通讯,主要是由Intent协助完成的。 Intent中文翻译为意图,是对一次即将运行的 操作的抽象描述,包括操作的动作,涉及的数据等, Android系统会根据Intent的描述,找到相应的组件, 并将Intent传递给调用的组件,完成组件的调用。 Intent详解详解 例如,我们通过前例注册Activity选择所在地信息, 点击所在地按钮后,能够弹出选择城市Activtiy进行 选择,并返回结果。 为了实现这个目的,注册Activity需要构造一个 Intent,这个Intent 用于告诉系统,我们要做“启动”动作, 此动

20、作对应的启动对象是选择城市Activtiy ,然后调用 startActivity (Intent intent),将构造的Intent 传入,系 统会根据此Intent 中的描述,到AndroidManifest.xml中找到 满足此Intent 要求的Activity,系统会调用找到的选择城 市Activity,最终传入Intent,对应的Activity则会根据此 Intent 中的描述,执行相应的操作。 Intent详解详解 No.方法类型描述 1startActivity(Intent intent)普通 启动一个Activity,并通过Intent 传送数据 2 startActi

21、vityForResult(Inte nt intent, int requestCode) 普通 启动并接收另一个Activity程序回 传数据,当requestCode大于等于 0才可以触发onActivityResult() 3getIntent()普通 返回启动当前Activity程序的 Intent 4 onActivityResult(int requestCode, int resultCode, Intent data) 普通 当需要接收Intent回传数据的时 候覆写此方法对回传操作进行处 理 Intent构成构成 componentcomponent(组件):(组件):指定

22、Intent的目标组件的类名称。 通常 Android会根据Intent 中包含的其它属性的信息,比如 action、data/type、category进行查找,最终找到一个与之 匹配的目标组件。 但是,如果 component这个属性有指定的话,将直接使用它 指定的组件,而不再执行上述查找过程。 指定了这个属性以后,Intent的其它所有属性都是可选的。 Intent的Component属性需要接受一个ComponentName对象, 创建一个ComponentName需要指定包名和类名。这就可唯一地 确定一个组件类,这样应用程序即可根据给定的组件类去启 动特定的组件。 Intent构成构

23、成 代码如下: ComponentName comp=new ComponentName(Context con,Class class); Intent intent=new Intent(); Intent.setComponent(comp); 等价于: Intent intent=new Intent(Context con,Class class); 在启动的组件中,通过以下语句获取相关的信息: ComponentName comp=getIntent().getComponent(); comp.getPackageName();/获取组件的包名 comp.getClassName

24、();/获取组件的类名 ComponentAttr例子 Intent构成构成 Intent的Action代表该Intent所要完成的一个抽象“动 作”,这个动作具体由哪个组件来完成,Action这个字符 串本身并不管。 比如Android提供的标准Acton:Intent.ACTION_VIEW, 它只表示一个抽象的查看操作,但具体查看什么,启动哪 个Activity 来查看,它并不知道(这取决于Activity的 配置,只要某个Activity的配置中包含了该ACTION_VIEW,该Activity就有 可能被启动)。 action(动作):(动作): 常用常用Action No.Acti

25、on名称AndroidManifest.xml配置名称描述 1ACTION_MAINent.action.MAIN 作为一个程序的入口,不需 要接收数据 2ACTION_VIEWent.action.VIEW用于数据的显示 3ACTION_DIALent.action.DIAL调用电话拨号程序 4ACTION_EDITent.action.EDIT用于编辑给定的数据 5ACTION_PICKent.action.PICK 从特定的一组数据之中进行 数据的选择操作 6ACTION_RUN

26、ent.action.RUN运行数据 7ACTION_SENDent.action.SEND调用发送短信程序 8 ACTION_GET_CONTE NT ent.action.GET_CONTEN T 根据指定的Type来选择打开 操作内容的Intent 9ACTION_CHOOSERent.action.CHOOSER创建文件操作选择器 查看Intent文档 Intent构成构成 被执行动作的附加信息。例如CATEGORY_ LAUNCHER 表示 Intent的接收者应该在Launcher中作为顶级应用

27、出现;而 CATEGORY_ALTERNATIVE表示当前的Intent是一系列的可选动作 中的一个,这些动作可以在同一块数据上执行。 一个IntentIntent对象最多只能包括一个对象最多只能包括一个ActionAction属性属性,程序可调 用的setAction(String str)方法来设置Action属性值;但一 个Intent对象可以包含多个包含多个CategoryCategory属性属性,程序可调用Intent 的addCategory(String str)方法来为Intent添加Category 属性。当程序创建Intent时,该Intent默认启动Category属性

28、值为Intent.CATEGORY_DEFAULT常量的组件。 category(类别):(类别): 常用常用Category No. Category名称 AndroidManifest.xml配置 名称 描述 1 CATEGORY_DEFA ULT ent.category.D EFAULT 默认的Category 2 CATEGORY_BRO WSABLE ent.category. BROWSABLE 指定该Activity能被浏 览器安全调用 3CATEGORY_TAB ent.category.TA B 指定该Act

29、ivity作为 TabActivity的Tab页 4 CATEGORY_LAUC HER ent.category.L AUCHER Activity显示在顶级程 序列表中 5 CATEGORY_HOM E ent.category.H OME 设置该Activity随系统 启动而运行 查看Intent文档 ActionCateAttr例子讲解 Intent构成构成 Data属性通常用于向Action属性提供操作的数据。不同的 Action通常需要携带不同的数据,如果Acition是ACTION_CALL, 那么数据部分将会是tel:电话号码。Dat

30、a属性接受一个URI对象, 一个URI对象通常通过如下形式的字符串来表示: content:/com.android.contacts/contacts/1 tel上面所示的两个字符串的冒号前面大致指定了数据的类型数据的类型, 冒号后面的是数据部分数据部分。因此一个合法的URI对象既可决定操作 哪种数据类型的数据,又可指定具体的数据值。 Data(数据数据): 数据举例数据举例 No.操作类型操作类型Data(Uri)格式)格式范例范例 1浏览网页浏览网页http:/网页地址网页地址http:/ 2拨打电话拨打电话tel:电话号码电话号码tel:01051283346

31、 3发送短信发送短信 smsto:短信接收人号短信接收人号 码码 smsto:4查找查找SD卡文件卡文件 file:/sdcard/文件或文件或 目录目录 file:/sdcard/mypic. jpg 5显示地图显示地图geo:坐标坐标,坐标坐标 geo:31.899533,- 27.036173 IntentIntent构成构成 u type(数据类型)(数据类型):显式指定Intent的数据类型(MIME)。 一般Intent的数据类型能够根据数据本身进行判定,但是通过 设置这个属性,可以强制采用显式指定的类型而不再进行推导。 通常来说当Intent不指定Dat

32、a属性时Type属性才会起作用,否 则Android系统将会根据Data属性来分析数据的类型。 u extras(附加信息):(附加信息):是其它所有附加信息的集合,以键 值对的形式保存所有的附加信息。使用extras可以为组件提供 扩展信息(putXXX(),getXXX()方法)。比如,如果要执行“发 送电子邮件”这个动作,可以将电子邮件的标题、正文等保存 在extras里,传给电子邮件发送组件。 IntentIntent构成构成 n 元素是AndroidManifest.xml文件中 元素的子元素,该子元素用于配置该Activity所 能“响应”的Intent。 元素里通常可包含如下子元

33、素: 0-N个子元素 0-N个子元素 0-1个子元素 n 当元素里的子元素里包含 多个子元素(相当于指定了多个字符串)时,就 表明该Activity能响应Action属性值为其中任意一个字符串的 Intent。 IntentIntent解析解析 Android如何解析如何解析Intent? 直接(显式)直接(显式)Intent:指定了component 属性的Intent(调 用setComponent(ComponentName) 。通过指定具体的组 件类,通知应用启动对应的组件。 间接(隐式)间接(隐式)Intent:没有指定component 属性的Intent。 这些Intent 需要包含足够的信息,这样系统才能根据这些信 息,在所有的可用组件中,确定满足此Intent 的组件。隐式 Intent经常用于激活其他

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论