Android 组件Activity


一,Activity 的启动和结束

从当前页面跳转到新页面,跳转代码如下:

startActivity(new Intent(源页面.this,目标页面.class));

从当前页面回到上一个页面,相当于关闭当前页面,返回代码如下:

finish();  //结束当前的活动页面

二,Activity 的生命周期

在这里插入图片描述

  • onCreate:创建活动。把页面布局加载到内存,进入了初始状态。
  • onStart:开始活动。把活动页面显示在屏幕上,进入了就绪状态。
  • onResume:恢复活动。活动页面进入活跃状态,能够与用户正常交互,例如允许相应用户的点击动作、允许用户输入文字等。
  • onPause:暂停活动。页面进入暂停状态,无法与用户正常交互。
  • onStop:停止活动。页面将不再屏幕上显示。
  • onDestroy:销毁活动。回收活动占用的系统资源,把页面从内存中清除。
  • onRestart:重启活动。重新加载内存中的页面数据。
  • onNewIntent:从启已有的活动实例。

(一)各状态的切换过程

  • 打开新页面的方法调用顺序为:
  • onCreate - onStart - onResume
  • 关闭旧页面的方法调用顺序为:
  • onPause - onStop - onDestroy
    在这里插入图片描述

Activity 的启动模式

  • 某个App先后打开两个活动,此时活动栈的变动情况如下图所示:
    在这里插入图片描述

  • 依次结束已打开的两个活动。此时活动栈的变动情况如下图所示:
    在这里插入图片描述

(一)在配置文件中指定启动模式

launchMode属性取值说明见下表:

launchMode属性值说明
standard标准模式,无论何时启动哪个活动,都是重新创建该页面的实例并放入栈顶。如果不指定launchMode属性,则默认为标准模式
singleTop启动新活动时,判断如果栈顶正好就是该活动的实例,则重用该实例;否则创建新的实例并放入栈顶,也就是按照standard模式处理
singleTask启动新活动时,判断如果栈中存在该活动的实例,则重用该实例,并清除位于该实例上面的所有实例;否则按照standard模式处理
singleInstance启动新活动时,将该活动的实例放入一个新栈中,原栈的实例列表保持不变

(二)显示Intent和隐式Intent

  • Intent是各个组件之间信息沟通的桥梁,它用于Android各个组件之间的通信,主要完成下列工作:
    1.标明本次通信请求从哪里来、到哪里去、要怎么走。
    2.发起方携带本次通信需要的数据内容,接收方从接收的意图中解析数据。
    3.发起方若想判断接收方的处理结果,意图就要负责让接收方回应答的数据内容。

三,Intent的组成部分

元素名称设置方法说明与用途
ComponentsetComponent组件,它指定意图的来源于目标
ActionsetAction动作,它指定意图的动作行为
DatasetData即Uri,它指定动作要操作的数据路径
CategoryaddCateGory类别,它指定意图的操作类别
TypesetType数据类型,它指定消息的数据类型
ExtrasputExtras扩展信息,它指定装载的包裹信息
FlagssetFlags标志位,它指定活动的启动标志

(一)显式Intent

  • 显示Intent,直接指定来源活动与目标活动,属于精确匹配。它有三种构造方法:
    1.在Intent的构造函数中指定。
    2.调用意图对象的setClass方法指定。
    3.调用意图对象的setComponent方法指定。

(二)隐式Intent

  • 隐式Intent,没有指定要跳转的目标活动,只给出了一个动作字符串让系统自动匹配,属于模糊匹配。动作名称既可以通过setAction方法指定,也可以通过构造函数Intent(String action)直接生成意图对象。常见的系统动作如下表:
Intent类的系统动作常量名系统动作的常量值说明
ACTION_MAINandroid…intent.action.MAINApp启动时的入口
ACTION_VIEWandroid.intent.action.VIEW向用户显示数据
ACTION_SENDandroid.intent.action.SEND分享内容
ACTION_CALLandroid.intent.action.CALL直接拨号
ACTION_DIALandroid.intent.action.DIAL准备拨号
ACTION_SENDTOandroid.intent.action.SENDTO发送短信
ACTION_ANSWERandroid.intent.action.ANSWER接听电话

四,向下一个Activity发送数据

  • Intent使用Bundle对象存放待传递的数据信息。
  • Bundle对象操作各类数据的读写方法说明见下表:
数据类型读方法写方法
整型数getIntputInt
浮点数getFloatputFloat
双精度数getDoubleputDouble
布尔值getBooleanputBoolean
字符串getStringputString
字符串数组getStringArrayputStringArray
字符串列表getStringArrayListputStringArrayList
可序列化结构getSerializableputSerializable

(一)Bundle

  • 在代码中发送消息包裹,调用意图对象的putExtras方法,即可存入消息包裹。
  • 在代码中接收消息包裹,调用意图对象的getExtras方法,即可取出消息包裹。

五,向上一个Activity返回数据

  • 处理下一个页面的应答数据,详细步骤说明如下:
    1.上一个页面打包好请求数据,调用startActivityForResult方法执行跳转动作。
    2.下一个页面接收并解析请求数据,进行相关处理。
    3.下一个页面在返回上一个页面时,打包应答数据并调用setResult方法返回数据包裹。
    4.上一个页面重写方法onActivityResult,解析获得下一个页面的返回数据。

(一)利用资源配置字符串

  • res\values\strings.xml 可以用来配置字符串形式的参数。
  • 在活动页面的java代码中,调用getString方法即可根据 “R.string.参数名称” 获得指定参数的字符串值。

(二)利用元数据传递配置信息

  • 元数据是一种描述其他数据的数据,它相当于描述固定活动的参数信息。
  • 在Activity节点内部添加meta-data标签,通过属性name指定元数据的名称,通过属性value指定元数据的值。

(三)在代码中获取元数据

  • 在java代码中,获取元数据信息的步骤分为下列三步:
  1. 调用getPackageManager方法获得当前应用的包管理器;
  2. 调用包管理器的getActivityInfo方法获得当前获得的信息对象;
  3. 获得信息对象的metaData是Bundle包裹类型,调用包裹对象的getString即可获得指定名称的参数值。

(四)给应用页面注册快捷方式

  • 元数据不仅能传递简单的字符串参数,还能传递更复杂的资源数据,比如支付宝的快捷方式菜单。
    在这里插入图片描述

(五)利用元数据配置快捷菜单

  • 元数据的meta-data标签除了前面说的name属性和value属性,还有resource属性,该属性可指定一个XML文件,表示元数据想要的复杂信息保存于XML数据中。
  • 利用元数据配置快捷菜单的步骤如下所示:
  1. 在res/values/strings.xml添加各种菜单项名称的字符串配置。
  2. 创建res/xm/shortcuts.xml,在该文件中填入各组菜单项的快捷方式定义(每个菜单对应哪个活动页面)。
  3. 给Activity节点注册元数据的快捷菜单配置。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梁辰兴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值