[计算机软件及应用]Android移动应用设计与开发--第04章.ppt_第1页
[计算机软件及应用]Android移动应用设计与开发--第04章.ppt_第2页
[计算机软件及应用]Android移动应用设计与开发--第04章.ppt_第3页
[计算机软件及应用]Android移动应用设计与开发--第04章.ppt_第4页
[计算机软件及应用]Android移动应用设计与开发--第04章.ppt_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

Android 移动应用设计与开发,第4章 Activity 以及Intent通信机制,4.1 Activity 生命周期 4.1.1 Activity 交互机制 4.1.2 Activity 状态 4.1.3 Activity 生命周期的事件回调方法 4.2 Intent 4.2.1 Intent 属性 4.2.2 Intent 解析 4.2.3 Activity的跳转,本章导读,4.1 Activity 生命周期,在Android应用程序中,所有的Android组件都有它自己的生命周期,表示从这一组件的创建到销毁的整个过程。在这一过程中,组件会在活动、非活动以及可见或不可见等状态中不断因应用场景的改变而进行切换。这一小节中,我们将对Android系统中Activity组件的生命周期进行详细的介绍,4.1.1 Activity 交互机制,Android针对Activity的管理使用的是栈机制,Activity栈保存了已经启动并且没有终止的Activity,并遵循“先进后出”的原则 具体说明:在某个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的Activity才可能处于栈顶,或者是有一个新的Activity被创建出来,则上一个Activity就被压栈下去 Android按照一种层次管理所有的Activity,因为Activity是直接涉及到与用户交互界面的处理,而任意时刻与用户交互的界面只有一个,所以Android针对Activity的管理采用了具有层次感的栈的数据结构,4.1.2 Activity 状态,Active /running,此时Activity一定处于屏幕的最前端,用户完全可以看得到, 并且可以与用户进行交互。对于Activity栈来说,它处于栈顶,Paused,Activity在屏幕上仍然可见,但是它已经失去了焦点,用户不能与 之进行交互。暂停状态的Activity是存活的,它维持着其内部状态和 信息,但是系统可能会在手机内存极低的情况下杀掉该Activity,Stop,Activity在屏幕上完全不能被用户看见,这个Activity已经完全被其他Activity所遮住。系统仍然保留有其内部状态和成员信息,但是它经常会由于手机系统内存被征用而被系统杀死回收,Killed,Activity被系统杀死回收或者未启动,4.1.2 Activity 状态,四种状态的转换关系如图4.1所示:,图4.1 Activity的4种状态之间的转换图,Activity启动后处于Active/Running 状态,此时Activity处于屏幕的最上面 当用户启动了新的Activity,并且此Activity部分遮挡了当前的Activity或拥有透明属性时,则当前的Activity转换为Paused状态,也可以从Paused状态到Active/Running状态 当用户启动的Activity完全遮住了当前的Activity时,则当前的Activity转换为Stop状态 处于Stop状态的Activity,当手机系统内存被其他应用程序征用时,Stop状态的Activity将首先被杀死,进入Killed状态。 Active/Running状态的Activity被用户终止或是Paused状态及Stop状态的Activity被系统终止后,Activity进入了Killed状态,4.1.3 Activity生命周期的事件回调方法,4.1.3 Activity生命周期的事件回调方法 事件回调方法种类,Android生命周期的事件回调方法如下:,void onCreate(Bundle savedInstanceState) void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy(),注意: (1)所有的Activiy都必须实现onCreate()方法,在该方法中可以对Activity进行一些初始化设置。 (2)所有的Activity生命周期方法的实现都必须先调用其父类的方法。,4.1.3 Activity生命周期的事件回调方法 Android生命周期分类,全生命周期,可视生命周期,前台生命周期,全生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止 Activity在onCreate()中设置所有“全局”状态以完成初始化 在onDestroy()中释放所有系统资源,可视生命周期onStart() 开始到onStop()结束 在此期间,用户可以在屏幕上看到该Activity 在这两个方法中,你可以管理该Activity的资源 可以在onStart()中注册一个BroadcastReceiver来监控UI变化,而在onStop()中取消该注册,前台生命周期自onResume()调用开始,至相应的onPause()调用为止 在此期间,Activity位于前台最上面,可与用户进行交互 当设备转入休眠状态或有新的Activity启动时,将调用onPause() 方法 当Activity接收到新的Intent的时候会调用onResume()方法,4.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变,说明: (1)椭圆是Activity可以经历的主要状态 (2)矩形框代表了当Activity在状态间发生改变的时候,我们进行操作所要实现的回调方法。,4.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变,4.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变,4.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变,注意:与前面所讲的7种方法不同,onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它们并不是总会被调用。,4.1.3 Activity生命周期的事件回调方法 实例,package com.androidbook.activitylife; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Activity1 extends Activity /* Called when the activity is first created. */ private static final String TAG = “Activity1“; /一个完整生命周期开始时被调用,初始化Activity Override public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.e(TAG,“onCreate“); Button button = (Button)findViewById(R.id.button); button.setText(“进入Activity2“); Button otherButton =,(Button)findViewById(R.id.otherbutton); otherButton.setText(“进入Activity3,弹出对话框“); button.setOnClickListener(new OnClickListener() Override public void onClick(View v) /TODO Auto-generated method stub Intent intent = new Intent( Activity1.this, Activity2.class); startActivity(intent); ); otherButton.setOnClickListener(new OnClickListener() Override public void onClick(View v) / TODO Auto-generated method stub Intent intent = new Intent( Activity1.this,Activity3.class); startActivity(intent); ); ,4.1.3 Activity生命周期的事件回调方法 实例,/ 可视生命周期开始时被调用 Override protected void onStart() / TODO Auto-generated method stub super.onStart(); Log.e(TAG,“onStart“); /在onStart()后被调用,用于恢复UI信息 Override protected void onRestoreInstanceState(Bundle savedInstanceState) / TODO Auto-generated method stub /从savedInstanceState恢复UI状态; /Bundle对象同样在onCreate方法中被传入。 super.onRestoreInstanceState(savedInstanceState); Log.e(TAG,“onRestoreInstanceState“); Override protected void onResume() / TODO Auto-generated method stub /在前台生命周期开始时被调用,恢复被onPause()停止的用于界面更新的资源,super.onResume(); Log.e(TAG,“onResume“); /在onResume()之后被调用,用于保存界面信息 Override protected void onSaveInstanceState(Bundle savedInstanceState) / TODO Auto-generated method stub /保存UI状态变化到savedInstanceState中。 /当进程被杀死或重启时这个Bundle会传入到onCreate方法。 super.onSaveInstanceState(savedInstanceState); Log.e(TAG,“onSaveInstanceState“); /重新进入可视界面前被调用,这个Activity已经出现过Override protected void onRestart() / TODO Auto-generated method stub super.onRestart(); Log.e(TAG,“onRestart“); /在前台生命周期结束时被调用,用来保存持久的数据或释放占用的资源,4.1.3 Activity生命周期的事件回调方法 实例,Override protected void onPause() / TODO Auto-generated method stub super.onPause(); Log.e(TAG,“onPause“); /在可视生命周期结束时被调用,保存数据和状态变化 Override protected void onStop() / TODO Auto-generated method stub super.onStop(); Log.e(TAG,“onStop“); /在整个生命周期结束时被调用,清除任何资源,包括结束线程、关闭数据库连接等。 Override protected void onDestroy() / TODO Auto-generated method stub super.onDestroy(); Log.e(TAG,“onDestroy“); ,4.1.3 Activity生命周期的事件回调方法 实例,实例情况分析:,4.1.3 Activity生命周期的事件回调方法 实例,(1)一个Activity(Activity1) 启动Activity1,下图为用户看到的界面:,4.1.3 Activity生命周期的事件回调方法 实例,(1)一个Activity(Activity1) Activity1的操作详情如下所示:,4.1.3 Activity生命周期的事件回调方法 实例,(2)两个Activity(Activity1和Activity2) 由Activity1-Activity2,Activity2完全覆盖Activity1,下图为用户看到的界面:,4.1.3 Activity生命周期的事件回调方法 实例,(2)两个Activity(Activity1和Activity2) Activity1和Activity2的操作详情如下所示:,4.1.3 Activity生命周期的事件回调方法 实例,(3)两个Activity(Activity1和Activity3) Activity1Activity3,此时的Activity3并不完全覆盖Activity1,也就是前面所说的暂停状态,这时的Activity3是以对话框的形式出现的。如下图所示:,4.1.3 Activity生命周期的事件回调方法 实例,(3)两个Activity(Activity1和Activity3) Activity1和Activity3的操作详情如下所示:,4.2 Intent,Intent是一个动作的完整描述,包含了产生组件、接收组件和传递数据信息。并且,Intent利用消息实现应用程序之间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用,4.2.1 Intent属性,Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个 组成都由相应的属性进行表示,并提供设置和获取相应属性的方法,4.2.1 Intent属性,(1)Action Action属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述,Action属性常量如下表所示:,4.2.1 Intent属性,(2)Data Data属性是执行动作的URI和MIME类型,Data属性常量如下表所示,4.2.1 Intent属性,(3)Action和Data匹配使用 不同的Action由不同的Data数据指定,见下表所示:,4.2.1 Intent属性,(4)Category Category属性指明一个执行Action的分类,Intent中定义了一系列Category属性常量,如下表所示:,4.2.1 Intent属性,(5)Component,Component属性用于指明Intent目标组件的类名称 如果没有指定了Component这个属性,通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件 如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程 指定Component属性后,Intent的其他属性都是可选的,4.2.1 Intent属性,(6) Extra,Extra属性用于添加一些附加信息,例如发送一个邮件,就可以通过Extra属性来添加主题(subject)和内容(body)。 通过使用Intent对象的putExtra()方法来添加附加信息。将一个人的姓名附加到Intent对象中,代码如下所示: Intent intent = new Intent(); ntent.putExtra(“name” ,“zhangshan”);,通过使用Intent对象的getXXXExtra()方法可以获取附加信息。例如,将上面代码存入Intent对象中的人名获取出来,因存入的是字符串,所以可以使用getStringExtra()方法获取数据,代码为: String name=intent.getStringExtra(“name“);,4.2.2 Intent解析,根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:直接Intent和间接Intent,(1)直接Intent 直接Intent通过直接指定组件来实现,常用方法有setComponent(),setClassName()或setClass(),如下示例:,/创建一个Intent对象 Intent intent = new Intent(); /指定Intent对象的目标组件是Activity2 intent.setClass(Activity1.this, Activity2.class);,4.2.2 Intent解析,通过Intent Filter过滤实现,过滤时通常根据Action、Data和Category属性进行匹配查找。Android提供了两种生成Intent Filter的方式:一种是通过IntentFilter类生成;另一种通过在配置文件AndroidManifest.xml中定义元素生成。 在AndroidManifest.xml配置文件中,Intent Filter以元素来指定。一个组件中可以有多个元素,每个元素描述不同的能力,如下示例:,(2)间接Intent,4.2.2 Intent解析,A、子元素,注意:列表中的Action属性不能为空,否则所有的Intent都会因匹配失败而被阻塞。所以一个元素下至少需要包含一个子元素,这样系统才能处理Intent消息,标签中常用、和这些子元素,分别对应Intent中的Action、Data和Category属性,用于对Intent进行匹配。 一个中可以添加多个子元素,如

温馨提示

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

评论

0/150

提交评论