欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

    Android移动应用设计与开发.doc

    • 资源ID:9004466       资源大小:953KB        全文页数:19页
    • 资源格式: DOC        下载积分:4
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要4
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Android移动应用设计与开发.doc

    Android 移动应用设计与开发第4章 Activity 以及Intent通信机制l 4.1 Activity 生命周期l 4.1.1 Activity 交互机制l 4.1.2 Activity 状态l 4.1.3 Activity 生命周期的事件回调方法l 4.2 Intentl 4.2.1 Intent 属性l 4.2.2 Intent 解析l 4.2.3 Activity的跳转4.1 Activity 生命周期 在Android应用程序中,所有的Android组件都有它自己的生命周期,表示从这一组件的创建到销毁的整个过程。在这一过程中,组件会在活动、非活动以及可见或不可见等状态中不断因应用场景的改变而进行切换。这一小节中,我们将对Android系统中Activity组件的生命周期进行详细的介绍幻灯片44.1.1 Activity 交互机制l Android针对Activity的管理使用的是栈机制,Activity栈保存了已经启动并且没有终止的Activity,并遵循“先进后出”的原则l 具体说明:在某个时刻只有一个Activity处在栈顶,当这个Activity被销毁后,下面的Activity才可能处于栈顶,或者是有一个新的Activity被创建出来,则上一个Activity就被压栈下去l Android按照一种层次管理所有的Activity,因为Activity是直接涉及到与用户交互界面的处理,而任意时刻与用户交互的界面只有一个,所以Android针对Activity的管理采用了具有层次感的栈的数据结构幻灯片54.1.2 Activity 状态Error! Reference source not found.图4.1 Activity的4种状态之间的转换图幻灯片74.1.3 Activity生命周期的事件回调方法幻灯片84.1.3 Activity生命周期的事件回调方法 事件回调方法种类Android生命周期的事件回调方法如下:l void onCreate(Bundle savedInstanceState)l void onStart()l void onRestart()l void onResume()l void onPause()l void onStop()l void onDestroy()注意:(1)所有的Activiy都必须实现onCreate()方法,在该方法中可以对Activity进行一些初始化设置。(2)所有的Activity生命周期方法的实现都必须先调用其父类的方法。幻灯片94.1.3 Activity生命周期的事件回调方法 Android生命周期分类Error! Reference source not found.幻灯片124.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变方法描述可被杀死下一个onPause()当系统将要启动另一个Activity或者弹出对话框时调用。此方法主要用于将所有持久性数据写入存储之中,这一切动作应该在短时间内完成,因为下一个Activity必须等到此方法返回后才会继续。 当Activity重新回到前台时继以onResume();当Activity变为用户不可见时继以onStop()。是onResume() oronStop()onStop()当Activity不再为用户可见时调用此方法。这可能发生在它被销毁或者另一个Activity(可能是现存的或者是新的)回到运行状态并覆盖它时。 如果Activity再次回到前台跟用户交互则继以onRestart();如果关闭Activity则继以onDestroy()。是onRestart() oronDestroy()onDestroy()在Activity销毁前调用,这可能发生在Activity结束(调用了它的 finish() 方法)或者因为系统需要临时空间而销毁该Activity实例时。可以用isFinishing()方法来区分这两种情况。是无幻灯片134.1.3 Activity生命周期的事件回调方法 Activity生命周期过程及状态改变方法描述可被杀死下一个onSaveInstanceState()Android系统在资源不足而终止Activity前被调 用,用以保存Activity的状态信息,供onCreate()和onRestoreInstanceState()方法恢复使用否onSaveInstanceState()onRestoreInstanceState() 恢复onSaveInstanceState()保存的Activity状态信息,在onStart()和onResume()方法之间使用否onRestoreInstanceState()注意:与前面所讲的7种方法不同,onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它们并不是总会被调用。幻灯片144.1.3 Activity生命周期的事件回调方法 实例幻灯片184.1.3 Activity生命周期的事件回调方法 实例l (1)一个Activity(Activity1) 启动Activity1,下图为用户看到的界面:幻灯片194.1.3 Activity生命周期的事件回调方法 实例l (1)一个Activity(Activity1)l Activity1的操作详情如下所示:操作日志信息启动Activity1按Back键按Home键再次启动Activity1幻灯片204.1.3 Activity生命周期的事件回调方法 实例l (2)两个Activity(Activity1和Activity2)由Activity1->Activity2,Activity2完全覆盖Activity1,下图为用户看到的界面:幻灯片214.1.3 Activity生命周期的事件回调方法 实例l (2)两个Activity(Activity1和Activity2)l Activity1和Activity2的操作详情如下所示:操作日志信息Activity1->Activity2Activity1->Activity2->BackActivity1->Activity2->HomeActivity1->Activity2->Activity1幻灯片224.1.3 Activity生命周期的事件回调方法 实例l (3)两个Activity(Activity1和Activity3)l Activity1Activity3,此时的Activity3并不完全覆盖Activity1,也就是前面所说的暂停状态,这时的Activity3是以对话框的形式出现的。如下图所示:幻灯片234.1.3 Activity生命周期的事件回调方法 实例l (3)两个Activity(Activity1和Activity3)l Activity1和Activity3的操作详情如下所示:操作日志信息Activity1->Activity3幻灯片244.2 Intent Intent是一个动作的完整描述,包含了产生组件、接收组件和传递数据信息。并且,Intent利用消息实现应用程序之间的交互机制,这种消息描述了应用中一次操作的动作、数据以及附加数据,系统通过该Intent的描述负责找到对应的组件,并将Intent传递给调用的组件,完成组件的调用幻灯片254.2.1 Intent属性Intent由动作、数据、分类、类型、组件和扩展信息等内容组成,每个组成都由相应的属性进行表示,并提供设置和获取相应属性的方法组成属性设置属性方法获取属性方法动作ActionsetAction()getAction()数据DatasetData()getData()分类CategoryaddCategory()类型TypesetType()getType()组件ComponentsetComponent()setClass()setClassName()getComponent()扩展信息ExtraputExtra()getXXXExtra()获取不同数据类型的数据,如int类型则使用getIntExtra(),字符串则使用getStringExtra(),getExtras()获取Bundle包幻灯片264.2.1 Intent属性(1)ActionAction属性用于描述Intent要完成的动作,对要执行的动作进行一个简要描述,Action属性常量如下表所示:Action常量行为描述使用组件ACTION_CALL打电话,即直接呼叫Data中所带电话号码ActivityACTION_ANSWER接听来电ACTION_SEND由用户指定发送方式进行数据发送操作ACTION_SENDTO根据不同的Data类型,通过对应的软件发送数据ACTION_VIEW根据不同的Data类型,通过对应的软件显示数据ACTION_EDIT显示可编辑的数据ACTION_MAIN应用程序的入口ACTION_SYNC同步服务器与移动设备之间的数据ACTION_BATTERY_LOW警告设备电量低BroadcastACTION_HEADSET_PLUG插入或者拔出耳机ACTION_SCREEN_ON打开移动设备屏幕ACTION_TIMEZONE_CHANGED移动设备时区发生变化幻灯片274.2.1 Intent属性(2)DataData属性是执行动作的URI和MIME类型,Data属性常量如下表所示Data属性说明示例tel:/号码数据格式,后跟电话号码tel:/123mailto:/邮件数据格式,后跟邮件收件人地址mailto:/dh163.comsmsto:/短信数据格式,后跟短信接收号码smsto:/123content:/内容数据格式,后跟需要读取的内容content:/contacts/people/1file:/文件数据格式,后跟文件路径file:/sdcard/mymusic.mp3geo:/latitude,longitude经纬数据格式geo:/180,65幻灯片284.2.1 Intent属性(3)Action和Data匹配使用不同的Action由不同的Data数据指定,见下表所示:Action属性Data属性描述ACTION_VIEWcontent:/contacts/people/1显示_id为1的联系人信息ACTION_EDITcontent:/contacts/people/1编辑_id为1的联系人信息ACTION_VIEWtel:123显示电话为123的联系人信息ACTION_VIEWhttp:/www.google.com在浏览器中浏览该网页ACTION_VIEWfile:/sdcard/mymusic.mp3播放MP3幻灯片294.2.1 Intent属性(4)CategoryCategory属性指明一个执行Action的分类,Intent中定义了一系列Category属性常量,如下表所示:Category属性说明CATEGORY_DEFAULT默认的执行方式,按照普通Activity的执行方式执行CATEGORY_HOME该组件为Home ActivityCATEGORY_LAUNCHER优先级最高的Activity,通常为入口ACTION_MAIN配合使用CATEGORY_BROWSABLE可以使用浏览器启动CATEGORY_GADGET可以内嵌到另外的Activity中幻灯片304.2.1 Intent属性(5)Componentl Component属性用于指明Intent目标组件的类名称l 如果没有指定了Component这个属性,通常Android会根据Intent中包含的其他属性的信息,比如Action、Data/Type、Category进行查找,最终找到一个与之匹配的目标组件l 如果指定了Component这个属性,Intent则会直接根据组件名查找到相应的组件,而不再执行上述查找过程l 指定Component属性后,Intent的其他属性都是可选的幻灯片314.2.1 Intent属性(6) Extral Extra属性用于添加一些附加信息,例如发送一个邮件,就可以通过Extra属性来添加主题(subject)和内容(body)。l 通过使用Intent对象的putExtra()方法来添加附加信息。将一个人的姓名附加到Intent对象中,代码如下所示:l Intent intent = new Intent();l ntent.putExtra(“name” ,“zhangshan”);l 通过使用Intent对象的getXXXExtra()方法可以获取附加信息。例如,将上面代码存入Intent对象中的人名获取出来,因存入的是字符串,所以可以使用getStringExtra()方法获取数据,代码为:l String name=intent.getStringExtra("name");幻灯片324.2.2 Intent解析根据Intent寻找目标组件时所采用的方式不同,可以将Intent分为两类:直接Intent和间接Intent(1)直接Intent直接Intent通过直接指定组件来实现,常用方法有setComponent(),setClassName()或setClass(),如下示例:注意:<intent-filter>列表中的Action属性不能为空,否则所有的Intent都会因匹配失败而被阻塞。所以一个<intent-filter>元素下至少需要包含一个<action>子元素,这样系统才能处理Intent消息幻灯片354.2.2 Intent解析B、<category>子元素l 一个<intent-filter>中也可以添加多个<category>子元素,例如:<intent-filter><category android:value="android.intent.category.DEFAULT"/><category android:value="android.intent.category.BROWSABLE"/><intent-filter>注意:与Action一样,<intent-filter>列表中的Category属性不能为空。Category属性的默认值“android.intent.category.DEFAULT”是启动Activity的默认值,在添加其他Category属性值时,该值必须添加,否则也会匹配失败。 幻灯片364.2.2 Intent解析C、<data>子元素一个<intent-filter>中可以包含多个<data>子元素,用于指定组件可以执行的数据,例如:<intent-filter><data android:mimeType="video/mpeg" <!- MIME类型 , Intent对象和过滤器都可以用“*”通配符匹配子类型字段,如“text/*”,“audio/*”表示任何子类型 ->android:scheme="http"android:host="com.example.android"android:path="folder/subfolder/1"android:port="8888"/><data android:mimeType="audio/mpeg"android:scheme="http" <!- 模式 ->android:host="com.example.android" <!- 主机 ->android:path="folder/subfolder/2"android:port="8888"/><data android:mimeType="audio/mpeg"android:scheme="http"android:host="com.example.android" android:path="folder/subfolder/3" <!- 路径 ->android:port="8888"/> <!- 端口 -></intent-filter> 幻灯片374.2.3 Activity的跳转l 在Android世界的四大组件Activity、BroadcastReceiver、Service、Content Provider中,前三个都是通过Intent来解析进行跳转的,Intent可以说是连接这四大组件的重要桥梁l 在使用Intent进行Activity之间的跳转时,我们通常有三种Intent跳转方式,即:不带参数的跳转、带参数的跳转以及带返回值的跳转(1)不带参数跳转Intent intent = new Intent();intent.setClass(Activity1.this,Activity2.clas);startActivity(intent);幻灯片384.2.3 Activity的跳转(2)带参数跳转(用Bundle封装数据)Intent intent = new Intent();Bundle bundle = new Bundle();bundle.putString("Name", "kate");bundle.putString("Age", "25");intent.putExtras(bundle);intent.setClass(Activity1.this, Activity2.class);startActivity( intent );Activity1跳转到Activity2之后,Activity2通过Bundle获取Intent传过来的值,方法如下:Bundle bundle = this.getIntent().getExtras();String name = bundle.getString("Name");String age = bundle.getString("Age"); 幻灯片394.2.3 Activity的跳转(3)带返回值的跳转(用Bundle封装数据)l 第一个页面传送参数值的代码如下所示:Intent_intent=newIntent();intent.setClass( Activity1.this, Activity2.class);Bundle bundle = new Bundle();bundle. putString("参数", "参数值");intent.putExtra(bundle); 注:不传参数的话,可以不加此行代码this.startActivityForResult( intent, 0);注:startActivityForResult(Intent intent, Int requestCode)方法中的参数 requestCode用于识别第二个页面传回来的值。l 第二个页面准备返回数据的代码如下所示:Intent intent = new Intent();Bundle bundle = new Bundle();bundle. putString("参数", "参数值");intent.putExtra(bundle);intent.setClass(Activity2.this,Activity1.class);setResult( RESULT_OK, intent); 这里有2个参数(int resultCode, Intent intent)finish();幻灯片404.2.3 Activity的跳转(3)带返回值的跳转(用Bundle封装数据)l 第一个页面接收返回值的代码如下所示:protected void onActivityResult(int requestCode, int resultCode, Intent data) switch (requestCode ) /requestCode为Activity1的请求标识 /resultCode为回传的标记,在Activity2中使用的是RESULT_OK,所以此处进行选择 case 0: if(resultCode = RESULT_OK) Bundle b=data.getExtras(); /data为Activity2中回传的Intent String str=b.getString("参数");/str即为回传的值"参数值" break; default: break;幻灯片414.2.3 Activity的跳转(3)带返回值的跳转(用Bundle封装数据)l 第一个页面接收返回值的代码如下所示:protected void onActivityResult(int requestCode, int resultCode, Intent data) switch (requestCode ) /requestCode为Activity1的请求标识 /resultCode为回传的标记,在Activity2中使用的是RESULT_OK,所以此处进行选择 case 0: if(resultCode = RESULT_OK) Bundle b=data.getExtras(); /data为Activity2中回传的Intent String str=b.getString("参数");/str即为回传的值"参数值" break; default: break;幻灯片42第4章 结束

    注意事项

    本文(Android移动应用设计与开发.doc)为本站会员(rrsccc)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开