Android程序设计-Activity_第1页
Android程序设计-Activity_第2页
Android程序设计-Activity_第3页
Android程序设计-Activity_第4页
Android程序设计-Activity_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

1、Android: Activity嵌入式系统开发与设计嵌入式系统开发与设计Android核心组件:ActivitypActivityu活动uAndorid组件中最基本也是最为常见用的组件u在Android应用中,一个Activiy通常就是一个单独的屏幕u每个Activity都被实现为一个从活动积累继承来的独立的类u活动类显示的用户接口由视图控件组成,并对事件做出响应pActivity是Android应用程序的表示层u使用View来构成显示信息和响应用户动作的UIu可以看做是开发环境中的Formu应用程序越复杂,需要的屏幕可能越多2Activity的创建与使用的创建与使用Activity的创建和

2、使用p创建创建Activityu在在Activity类的基础上进行扩展类的基础上进行扩展u在在Activity中定义中定义UI并实现其功能并实现其功能p基本基本Activity类提供了封装了窗口显示处理功能的空类提供了封装了窗口显示处理功能的空白屏幕白屏幕u交互和显示还需要进行设计交互和显示还需要进行设计pActivity的注册的注册u应用程序中的应用程序中的Activity需要在需要在AndroidManifest.xml中进中进行注册行注册u没有对应标签的没有对应标签的Activity不能被启动不能被启动4例子例子1Activity的创建和使用(2)p在android.app.Activi

3、ty类中,Android定义了一系列方法u在应用程序中通过对这些方法的复写来完成对Activity的创建和使用upublic class OurActivity extends Activity protected void onCreate(Bundle savedInstanceState); protected void onStart(); protected void onReStart();protected void onResume(); protected void onPause(); protected void onStop(); protected void onDe

4、stroy(); 5Activity的创建和使用(3)pprotected void onCreate(Bundle savedInstanceState)u一个 Activity 的实例被启动时调用的第一个方法u一般都会覆盖该方法作为应用程序的一个入口点p完成一些初始化数据、设置用户界面等工作u大多数情况下,在该方法中从xml 中加载设计好的用户界面。p例如setContentView(R.layout.main); u也可从 savedInstanceState中读取保存到存储设备中的数据p需要判断 savedInstanceState是否为null,因为Activity第一次启动时并没有

5、数据被存贮在设备中u if(savedInstanceState!=null) savedInstanceState.get(Key); 6Activity的创建和使用(4)pprotected void onStart()u在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用pProtected void onReStart()u在Activity被停止后调用pprotected void onResume()u在 Activity从 Pause 状态转换到 Active 状态时被调用7Activity的创建和使用(5)pp

6、rotected void onPause()u在 Activity 从 Active 状态转换到 Pause状态时被调用u必要时也需要保存状态和数据pprotected void onStop()u在 Activity 从 Active 状态转换到 Stop 状态时被调用u一般在这里保存 Activity 的状态信息pprotected void onDestroy()u在 Activity 被结束时调用,它是被结束时调用的最后一个方法u一般完成释放资源,清理内存等工作8例子例子2Activity的生命周期的生命周期Activity的生命周期(8)10完整生命周期完整生命周期可视生命周期可视

7、生命周期前台生命周期前台生命周期例子例子3例子例子4Activity的生命周期(9)p完整生命周期uActivity的完整生命周期自第一次调用onCreate()方法开始,到调用onDestroy()为止p如果Activity所在的进程被终止,那么即使没有调用onDestroy方法Activity也结束其存在u在onCreate()中设置所有“全局”状态以完成初始化p初始化Activityp扩展(inflate)UIp分配对类变量的引用p将数据绑定到控件p创建服务和线程u在onDestroy()中释放所有系统资源p通过重写来清除,保证所有外部资源被关闭11Activity的生命周期(10)p

8、Activity的可视生命周期u自onStart()调用开始直到相应的onStop()调用结束u在此期间,用户可以在屏幕上看到Activityp可能不是用户关注的活动,或者不与用户进行交互u可以保留用来向用户显示这个Activity所需的资源pActivity的可视生命周期可能多次经历uonStart() 和 onStop() 方法可以随着应用程序是否为用户可见而被多次调用u在可视生命周期内可能被直接销毁,而不调用onStop方法12Activity的生命周期(11)ponStop方法u用来暂停或者停止动画、线程、计时器、服务或者其他专门用于更新UI的进程uUI不可见时该方法只消耗资源而没有意

9、义ponStart/onReStartu当UI可见时使用这两个方法恢复或者重启进程uonReStart可以实现当Activity在其完整生命周期内重启才能完成的处理ponStart/onStopu也可以用来注册和销毁专门用来更新UI的广播接收器13Activity的生命周期(12)p Activity的前台生命周期u自onResume()调用起,至相应的onPause()调用为止u在此期间,Activity位于前台最上面并与用户进行交互,接受用户的输入uActivity会经常在暂停和恢复之间进行状态转换p当Activity不被关注或者有新的Activity启动时,将调用onPause()方法p

10、当Activity获得结果或者接收到新的Intent时会调用onResume()方法uonReusme()方法中的代码尽可能的少,以保证切换时的响应速度ponPause()u一般重写来托管未保存的改动u处于pause状态的Activity可能被销毁14Activity的生命周期pAndroid应用程序不能控制所拥有进程的生存期uAndroid系统在运行时管理每个应用程序的进程u同样业管理每个进程内的每个活动pActivity的管理u所有的Activity由Android系统的Activity栈管理p当前所有正在运行的进程的后进先出的集合uActivity的状态由它在栈中的位置所决定u一个新的A

11、ctivity执行后被放置到栈的顶端,变 成“running activity”,此前的Activity存在于堆栈中,一般不在前景p如果通过“Back”返回此前的Activity或者当前Activity被关闭,栈中的下一个活动变成栈顶活动,并成为活动状态15Activity的生命周期(2)pActivity的状态uActivity在系统中不断的被创建和销毁u在Activity栈中被移进和移出uActivity在不同的状态中转换pActivity的4个状态u活动状态(Active)u暂停状态(Paused)u停止状态(Stop)u非活动状态(Finish/Kill)16Activity的生命周期

12、(3)pActivity:活动状态u位于Activity栈的栈顶u可见的、focused的前台Activityu处于屏幕的最上层pAndroid系统会尽力维持活动状态Activity的运行u通过适当的销毁其他的Activity来保证活动状态Activity所需的资源u当有某个Activity变为活动状态时,该活动被暂停p处于paused状态17Activity的生命周期(4)pActivity:暂停状态u特定情况下可见但不是焦点的Activityp非全屏或者半透明状态u仍处于近似active的状态p自身的状态和数据都存在p与窗口管理程序保持联系p不能接收用户的输入事件u被系统终止p当系统内存资

13、源不足时会被终止p状态的转变u不可见时转变为停止状态18Activity的生命周期(5)pActivity:停止状态u当一个Activity 被其它的Activity 完全的遮盖住时,Activity的状态发生变化u仍保有其状态及数据u已变为不可见,画面是隐藏且不需要更新p停止状态的Activity会被终止u当系统内存不足时,stop 状态的Activity首先被终止已释放内存p状态的转换uActivity退出或者被关闭19Activity的生命周期(6)pActivity的终止不受程序员控制u可以通过程序创建和运行Activity,并使用方法停止Activityu终止Activity由And

14、roid系统决定p当Activity处于pause或者stop状态时可能被系统终止并回收u应用程序运行过程中的一些状态(用户输入等)需要保存到持久存储中u应用程序中启动了其他后台线程,同样也需要进行处理p否则会失去运行时的状态或输入或者p由于没有处理后台线程导致异常20Activity的生命周期(7)pActivity状态的转换u除栈顶Activity外均为pause/stop/finish/kill状态u一旦栈顶Activity失去焦点就变为pause/stop/finish/kill状态,同时新的Activity或者栈中的下一个Activity成为栈顶Activityp转换的控制u状态的转

15、换由系统控制,对用户不可见u转换过程中所存储的数据和状态在Activity转换为active状态时就需要进行恢复21例子例子5多多Activity的使用的使用Intent简介简介Intent(意图)pIntentuAndorid系统中的消息传递机制uActivity之间消息的传递uActivity、Service、Broadcast Receiver之间的桥梁u可用来在系统范围内广播消息u用来描述一个程序想要作些什么事情24IntentactivityserviceBroadcast receiverIntent(意图)(2)pAndroid Intent基本的设计理念u通过Intent减少组

16、件间的耦合u允许应用程序与其它的应用程序间传递Intent来执行动作和产生事件u使用Intent可以激活Android应用的三个核心组件pActivitypServicepBroadcastReceiverpIntent对操作的描述u通过startActivity方法来启动Activityu通过broadcast Intent机制将一个Intent发送给对该Intent感兴趣的BroadcastReceiveru通过startService(Intent)或bindService(Intent, ServiceConnection, Int)来和后台的Service进行交互25Intent的类

17、别p两类intentu显式Intentu隐式Intentp显式Intentu指定具体的目标组件处理p指定当前的应用程序上下文以及要启动的活动类,然后传递给startActivityp调用Intent.setComponent()或Intent.setClass()方法指定了组件名或类对象的Intent为显式意图u显式Intent明确指定了Intent应该传递给哪个组件ustartActivity(new Intent(ActivityLifecycle.this, AnotherActivity.class);26Intent的类别(2)p隐式Intentu由系统接受并决定如何处理p让匿名的组

18、件为请求的动作服务u没有调用Intent.setComponent()或Intent.setClass()方法指定组件名或类对象的Intent为隐式Intentp构建新的隐式Intent时,需要指定一个要执行的动作u还可以提供执行那个动作需要的数据uAndroid系统会根据隐式Intent中设置的动作(action)、类别(category)、数据(URI和数据类型)找到最合适的组件来处理这个Intentp通过Intent Filter(过滤器)来匹配隐式Intentp如果Intent Filter定义的动作、类别、数据(URI和数据类型)与Intent匹配,就会使用Intent Filter

19、所在的组件来处理该Intentp想要接收使用startActivity()方法传递的隐式Intent的活动必须在它们的意图过滤器中包含ent.category.DEFAULTustartActivity(new Intent(Intent.ACTION_DIAL); 27Intent的类别(3)p在AndroidManifest.xml中定义activity、service、broadcast receiver接受的intent28Intent使用实例p无参数Activity跳转uIntent it = new Intent(Activity.Main.this, Act

20、ivity2.class); startActivity(it); p向下一个Activity传递数据uIntent it = new Intent(Activity.Main.this, Activity2.class);it.putExtra(“msg”, “xxx”);startActivity(it); p对于数据的获取可以采用:uIntent it = getIntent();it.getStringExtra(msg);29例子例子6通过 bundle对象来传递信息p通过 bundle对象来传递信息ubundle维护了一个 HashMap对象,将数据存贮在这个 HashMap 中来

21、进行传递p消息传递代码如下u Intent intent =new Intent(CurrentActivity.this,OtherActivity.class); / 创建一个带“收件人地址”的 email Bundle bundle =new Bundle();/ 创建 email 内容bundle.putBoolean(“boolean_key”, true);/ 写内容bundle.putString(string_key, string_value); intent.putExtra(key, bundle);/ 封装 email startActivity(intent);/ 启

22、动新的 Activity 30通过 bundle对象来传递信息(2)p使用bundle对象ubundle维护了一个 HashMap对象,数据存贮在这个 HashMap 中来进行传递u代码稍显复杂p使用Intent内部的bundleu使用更为简便uIntent intent =new Intent(EX06.this,OtherActivity.class); intent.putExtra(boolean_key, true); intent.putExtra(string_key, string_value); startActivity(intent); p接收uIntent intent

23、=getIntent(); intent.getBooleanExtra(boolean_key,false); intent.getStringExtra(string_key); 31通过 bundle对象来传递信息(3)p对于bundle传递的消息的接收u在OtherActivity类的 onCreate()或者其它任何地方使用以下代码来接收相应的消息uIntent intent =getIntent();/ 收取消息 Bundle bundle =intent.getBundleExtra(“key”);/ 打开消息bundle.getBoolean(“boolean_key”);/

24、读取内容bundle.getString(string_key); 32例子例子7Intent解析解析Intent FilterpIntent Filteru注册Activity、Service和BroadcastReceiver并对一个动作或者一类特定的数据进行处理u描述一个组件愿意接收什么样的 Intent 对象uAndroid 将其抽象为 android.content.IntentFilter 类u当Intent要求做某些事情时,Intent Filter被用来描述这个Activity能够做些什么事情p比如 一个activity要能够显示个人联络数据,必需在Intent Filter说

25、明要如何处理个人联络数据并用ACTION_VIEW呈现出来pIntentFilter在AndroidManifest.xml里面声明u在Android的AndroidManifest.xml 文件中声明u通过 节点为一个 Activity 指定其 Intent Filterp告诉Android该 Activity 可以响应什么类型的 Intent34Intent Filter(2)35frameworkComponent nameActionDataCategoryintentcomponentactivityserviceBroadcast receiverIntent对象与属性对象与属性I

26、ntent对象pIntent对象uIntent本身是Intent对象u保存了对要执行操作的抽象描述pIntent被传递出去后,系统会为之找到合适的响应对象uActivityuServiceuBroadcastreceiveru三种情况相互独立不存在重叠p一个Intent对象是一个信息包,包含了u要接收此Intent的组件需要的信息(例如需要的动作和动作需要的信息)u android 系统需要的信息pIntent Filter节点中由标签来定义相关的匹配规则,告知系统对应的组件可以接受哪些intent37actionpactionu是用户定义的字符串u用于描述一个 Android 应用程序组件u

27、一个 Intent Filter 可以包含多个 Action。在 AndroidManifest.xml 的 Activity 定义时可以在其 节点指定一个 Action 列表用于标示 Activity 所能接受的“动作”,例如:u 38action(2)paction使用android:name属性指定要为之服务的action的名称p 如果启动Activity采用如下方法使用Intent 对象uIntent intent =new Intent(); intent.setAction(com.wust.myaction); u则所有的Action列表中包含了“com.wust.myactio

28、n”的 Activity 都将会匹配成功pAndroid预定义了一系列的Action分别表示特定的系统动作u这些 Action 通过常量的方式定义在 android.content.Intent中,以“ACTION_”开头uAction 需要尽可能明确的名字p通过 setAction() 设置actionp通过 getAction() 进行获取u可以在 Android 提供的文档中找到它们的详细说明39datapData属性有两部分构成u数据URI u数据MIME typepaction的定义通常决定了data的定义方式p采用指向数据的URI来表示datau例如指向联系人的URI可以是pCon

29、tent:/contacts/21p可以明确的在 Intent object上设置一个 data typeusetData() 方法设置URIusetType() 设置MIME typeusetDataAndType() 可以对二者都进行设置u获取URI 和data type可分别调用getData()和getType()方法40URI 数据匹配p一个Intent 可以通过 URI 携带外部数据给目标组件u在节点中,通过 节点匹配外部数据umimeType 属性指定携带外部数据的数据类型uscheme 指定协议uhost、port、path 指定数据的位置、端口、和路径u如下u p如果在Int

30、ent Filter中指定了这些属性,那么只有所有的属性都匹配成功时URI数据匹配才会成功41categorypCategoryu字符串,包含了处理该Intent的组件的种类信息u为执行动作的附加信息,起着对action的补充说明作用u一个Intent对象可以有多个categorypAndroid系统中定义了category 常量p对category的操作uaddCategory() 添加一个categoryuremoveCategory()删除一个category()ugetCategorys()获取所有的category()42category类别匹配pAndroidManifest.xm

31、lp使用android:category属性指定应该在哪种环境下为动作提供服务u每个Intent Filter标签可以包含多个category标签u可以自行指定category或者Android系统提供的标准值p节点中可以为组件定义一个Category 类别列表u当 Intent 中包含这个列表的所有项目时 Category 类别匹配才会成功43ExtraspExtrasu附加信息u键-值对形式的信息u例如pACTION_TIMEZONE_CHANGED的intent有一个time-zone附加信息来指明新的时区pACTION_HEADSET_PLUG有一个state附加信息来指示耳机是被插入还是被拔出p对Extras的操作uintent对象有一系列put.()和set.()方法来进行设定和获取u附加信息可以使用putExtras()和getExtras()作为Bundle进行读/写44Intent匹配(2)p使用startActivity(intent)来启动另外一个Activit

温馨提示

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

评论

0/150

提交评论