Android快速入门(五):Activity

Activity初识

Activity是Android系统API的一个类,用于提供一个系统与用户的交互机制。

简单来理解,Activity也可以理解为一个页面,可以获取对应的UI组件为之绑定响应的处理事件,即与人的交互。

每个Activity都需要继承自android.app.Activity,通过调用Activity类的setContentView()方法可以设置用户界面。

从一个界面跳到另一个界面,可通过Activity的startActivity()方法实现,传入一个Intent参数,该参数可用来进行数据传递。

Android系统采用栈的数据结构来管理一个程序的多个用户界面。

Activity状态

Activity有以下5种状态:

  • started状态

Activity启动,并入栈,此时尚未在用户屏幕上将界面显示出来。

  • running状态

界面在屏幕上显示出来,且位于最上层,获取用户输入焦点

  • paused状态

界面被遮挡,但仍然可见,失去用户输入焦点

  • stopped状态

界面被另一个Activity的界面遮挡,完全看不见,但仍然存活

  • exited状态

Activity出栈,停止运行,且被释放掉

为了响应和处理Activity各个状态的变化,Activity类提供了7个回调方法,供开发者覆盖。当Activity的状态发生变化时,这7个方法中的若干方法会被调用进行相关的处理。这些方法如下:

Activity事件

  • onCreate()方法

Activity启动后被调用,此时界面尚未显示出来,一般用于进行初始化的操作。该方法需要一个Bundle类型的参数,当方法被调用时由系统传入该参数

  • onStart()方法

当Activity状态变为可见时被调用

  • onResume()方法

当Activity获取用户焦点时被调用

  • onPause()方法

当新的Activity启动,当前Activity失去用户焦点时被调用,此时用户界面仍然可见或部分可见。Activity被暂停后可能会被系统强制结束以释放内容空间,所以通常需要在此时保存程序的相关数据

  • onStop()方法

当前用户空间被新的界面遮挡,完全不可见时调用。此时该Activity有可能会被系统强制结束以释放内存空间,因此需要在此时保存程序的相关数据

  • onRestart()方法

当Activity从停止状态恢复时被调用,也就是说页面重新可见

  • onDestroy()方法

当Activity释放时调用

Activity启动模式

之前我们提到过,Android通过一个task栈来管理多个Activity,而Activity的启动模式则决定是进入存在的栈还是进入新的栈。Activity的启动模式有如下几种:

  • standard(标准模式)

默认的启动模式,每次激活Activity时都创建Activity实例,并放入任务栈中,即一个任务栈有可能有多个相同Activity类的实例

  • singleTop模式

激活Activity时,如果当前栈顶是当前Activity,则不需要创建,如果不是,则创建一个实例

  • singleTask模式

如果要激活的Activity在任务栈中存在该实例,则将之上的Activity实例全部出栈,让该Activity实例位于栈顶

  • singleInstance模式

激活Activity时,创建实例放入另外的栈中,且该栈中只有一个Activity实例

Activity的启动模式可以通过在manifest主配置文件的Activity节点里增加android:launchMode=" .. "设置

Intent初识

刚才我们介绍过,不同的Activity之间通过startActivity方法相互调用,而该方法需要传入一个Intent对象。Android中利用Intent对象建立连接并实现组件通信的模式,称作意图机制。

Intent类是Android组件连接的核心,一个Intent对象是对某个需要处理的操作所进行的封装和抽象的描述。它可以用来打开Activity,在多个Activity之间传递数据,以及启动后台服务,与广播组件和后台服务交互等,集中体现了整个组件连接模型的设计思想。

Intent属性与过滤器

一个Intent包含6个方面的属性:action、data、category、type、component和extras,下面一一说明:

action属性描述Intent对象所要实施的动作,可以调用Intent.setAction()方法来指定,常见的action如下:

  • ACTION_MAIN:表示整个程序的入口
  • ACTION_VIEW:表示用于将一些数据显示给用户
  • ACTION_EDIT:表示允许用户对一些数据做编辑
  • ACTION_DIAL:表示打电话面板
  • ACTION_CALL:表示直接拨打电话
  • ACTION_SEND:表示发送短信
  • ACTION_SENTO:表示选择发送短信
  • ACTION_BATTERY_LOW:表示电量低广播

data属性描述Intent对象中用于进行操作时的数据,通过Intent.setData()或setDataAndType()设置

category属性描述Intent对象中的action属性属于哪个类别,也就是设置Intent对象进行某项操作时的约束,通过Intent.addCategory()设置

type属性用来描述组件能够处理的请求类型(即数据的MIME类型),通过Intent.setType()设置,可以使用通配符*表示所有类别

例如:image/*   表示所有图片

component属性描述Intent对象中所使用的组件类的名字,通过Intent.setComponent()方法利用类名进行设定,也可以通过Intent.setClass()方法设置。当调用组件明确时,就不再需要action,data等信息去寻找满足条件的组件。一旦指定Component,Intent对象就变成了单纯的信息载体,只负责传递消息和数据。

extras属性以Bundle类的形式存储其他额外需要的数据,以键值对形式存放,使用setExtras()设置

Intent使用

Intent使用有两种方式:显示和隐式

显示:创建时就指定所对应的Activity对象

隐式:创建时不指定Activity对象,而是指定action,category等信息,由Android系统根据这些属性信息来选择合适的Activity取运行。这种方式以弱耦合的方式将Intent和Activity关联起来,提供更大的灵活性。

在AndroidManifest.xml配置文件中写Activity配置的时候,可以添加该Activity的过滤器,通过<intent-filter>标签来指定该Activity过滤哪些Intent,可以配置多个过滤器

复杂类型的数据传递

在之前我们介绍了不同Activity之间的数据传递,可以通过Intent或者Bundle来传递一些基本类型数据,而对于对象等复杂类型,可以通过以下两种方式:

  • Serilziable接口
  • Parceable接口

数据回传

当一个Activity启动另一个Activity后,需要等第二个Activity关闭后将数据带回来,可以通过startActivityForResult(intent)方法来开启另一个Activity,这样等第二个Activity关闭时,会将数据传递回来。同时还需要重写第一个Activity的OnActivityResult()方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值