第4章 程序活动单元Activity

课后习题

1. 简述Activity的生命周期的方法有哪些

答:Activity一共有7个方法,这些方法和调用的时机具体如下:
①onCreate():Activity创建时调用,通常做一些初始化设置。
②onStart():Activity即将可见时调用。
③onResume():Activity获取焦点时调用。
④onPause():当前Activity被其他Activity覆盖或屏幕锁屏时调用。
⑤onStop():Activity对用户不可见时调用。
⑥onDestroy():Activity销毁时调用。
⑦onRestart():Activity从停止状态到再次启动时调用。
在这里插入图片描述

2. 简述Activity的四种启动模式及其特点

答:Activity的四种启动模式分别为standard、singleTop、singleTask和singleInstance,这些模式的特点具体如下:
①standard:每启动一个Activity就会在栈顶创建一个新的实例。
②singleTop:当被启动的Activity位于栈顶时,复用该Activity实例。
③singleTask:当被启动的Activity在栈中存在实例时,会直接复用此Activity实例,并把当前Activity上面的所有实例弹出栈。
④singleInstance:会启动一个新的任务栈来管理该Activity。

3. 简述Activity、Intent、IntentFilter的作用

答:Activity表示活动,他是Android的四大组件之一,Intent表示意图,IntentFilter表示过滤器,他们的作用具体如下:
①Activity是一个负责与用户交互的组件,每个Android应用中都会用Activity来显示界面以及处理界面上一些控件的事件。
②Intent被称为意图,是程序中各组件间进行交互的一种重要方式,它不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递。
③IntentFilter为过滤器,当发送一个隐式Intent后,Android系统会将它与程序中的每一个组件的过滤器进行匹配,匹配属性有 action、data、category,需要这三个属性都匹配成功才能唤起相应的组件。

4.1Activity的生命周期

4.1.1生命周期状态

Activity的生命周期指的是Activity从创建到销毁的整个过程,这个过程大致可以分为五种状态,分别是启动状态、运行状态、暂停状态、停止状态和销毁状态

1.启动状态

Activity的启动状态很短暂,一般情况下,当Activity启动之后便会进入运行zhuangtai

2.运行状态

Activity在此状态时处于界面最前端,是可见的有焦点的,可以与用户进行交互
当Activity处于运行状态时,Android会尽可能地保持这种状态,即使出现内存不足的情况,Android也会先销毁栈底的Activity,来确保当前Activity正常运行

3.暂停状态

对用户来说仍然可见,但是它无法获取焦点,用户对它操作没有响应

4.停止状态

完全不可见时就处于停止状态,如果系统内存不足,那么这种状态下的Activity很容易被销毁

5.销毁状态

当Activity处于销毁状态时, 将被清理出内存
注:Acitivity生命周期的启动状态和销毁状态是过渡状态,Activity不会在这两个状态停留

4.1.2 声明周期方法

Activity的生命周期包括创建、可见、获取焦点、失去焦点、不可见、重新可见、销毁等环节,针对每个环节Activity都定义了相关的回调方法
①onCreate(): Activity创建时调用,通常做一些初始化设置
②onStart():Activity即将可见时调用
③onResume():Activity获取焦点时调用
④onPause():当前Activity被其他Activity覆盖或屏幕锁屏时调用
⑤onStop(): Activity对用户不可见时调用
⑥onDestroy():Activity销毁时调用
⑦onRestart():Activity从停止状态到再次启动时调用
在这里插入图片描述
当程序中只有一个Activity时无法进行从停止状态到再次启动状态的操作

4.2Activity的创建、配置、开启和关闭

4.2.1创建Activity

在这里插入图片描述

4.2.2配置Activity

创建Activity可以使用Java类继承Activity的方式实现
创建的每个Activity都必须在清单文件AndroidManifest.xml中配置才能生效
Acitivity组件用activity标签表示,通过android:name的属性指定该Activity的名称

4.2.3开启和关闭Activity

1.启动Activity

Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);

2.关闭Activity

在这里插入图片描述

4.3Intent与IntentFilter

Intent用于相同或者不同应用程序组件间的绑定

4.3.1Intent

Intent被称为意图,是程序中各组件间进行交互的一种重要方式,不仅可以指定当前组件要执行的动作,还可以在不同组件之间进行数据传递,一般用于启动Activity、Service以及发送广播等

1.显式Intent

直接指定目标组件,如启动Activity示例

2.隐式Intent

不会明确指出需要激活的目标组件,被广泛地应用在不同应用程序之间传递消息
Android系统会使用IntentFilter匹配相应的组件,匹配的属性主要包括以下三个:
action:要完成的工作
data:传递的数据
category:为action添加的额外信息
在这里插入图片描述

4.3.2IntentFilter

当发送一个隐式Intent后,Android系统会将它与程序中的每一个组件的过滤器进行匹配,三个属性都匹配成功才能唤起相应的组件

1.action属性匹配规则

action属性用来指定Intent对象的动作
在这里插入图片描述
intent-filter标签中可以罗列多个action属性,但是当使用隐式Intent激活组件时,只要Intent携带的action与其中一个intent-filter标签中的action声明相同,action属性就匹配成功
在清单文件中为Activity添加intent-filter标签时,必须添加action属性,否则隐式intent无法开启该activity

2.data属性匹配规则

data属性用来指定数据的URI或者数据MIME类型,它的值通常与Intent的action属性有关联
在这里插入图片描述
intent-filter标签中可以罗列多个data属性,每个data属性可以指定数据的MIME类型和URI
隐式Intent携带的data数据只要与IntentFilter中的任意一个data声明相同,data属性就匹配成功

3.category属性匹配规则

用于为action添加额外信息,一个IntentFilter可以不声明category属性,也可以声明多个category属性
在这里插入图片描述
隐式Intent中声明的category必须全部能够与某一个IntentFilter中的category匹配才算匹配成功
IntentFilter中罗列的category属性数量必须大于或者等于隐式Intent携带的category属性数量
如果一个隐式Intent没有设置category属性,那么他可以通过任何一个IntentFilter的category匹配

4.4Activity之间的跳转

4.4.1在Activity之间数据传递

1.使用Intent的putExtra()方法传递数据

通过puExtra()方法将传递的数据存储在Intent对象后,如果想获取该数据,可以通过getXxxExtra()方法来实现
在这里插入图片描述

2.使用Bundle类传递数据

通过键值对的形式来保存数据
在这里插入图片描述

4.4.2Activity之间的数据回传

1.startActivityForResult()方法

startActivityForResult方法用于开启一个Activity,当开启的Activity销毁时,希望从中返回数据,该方法中有2个参数,第一个参数intent表示意图,第二个参数requestCode表示请求码,用于标识请求的来源,如在MainActivity中点击两个按钮都跳转到SecondActivity,可以使用请求码标识判断是从哪个按钮跳转的

2.setResult()方法

setResult方法用于携带数据进行回传,该方法中有2个参数,第1个参数resultCode表示返回码,用于标识返回的数据来自哪一个Activity。第2个参数intent表示用于携带数据并回传到上一个界面

3.onActivityResult()方法

用于接收回传的数据,并根据传递的参数requestCode、resultCode来识别数据的来源
在这里插入图片描述
在使用setResult方法之后,需要调用finish方法关闭SecondActivity,强制销毁SecondActivity,目的是为了跳转回MainActivity
setResult放只负责返回数据,没有跳转功能,finish可强行返回,MainActivity被销毁后程序会回调MainActivity的onActivityResult()方法来接收回传的数据
在这里插入图片描述

4.5Activity的任务栈和启动模式

4.5.1Android中的任务栈

Android任务栈是一种用来存放Activity实例的容器
先进后出,两个基本操作,分别是压栈和出栈
通常Android应用都有一个任务栈,每打开一个Activity时,该Activity就会被亚茹任务栈,每销毁一个Activity时,该Activity就会被弹出任务栈,用户操作的Activity永远都是栈顶的Activity

4.5.2Activity的启动模式

1.standard模式

每启动一个Activity就会在栈顶创建一个新的实例
Activity的默认启动方式
闹钟程序

2.singleTop模式

该模式会判断要启动的Activity实例是否位于栈顶,如果位于栈顶则直接复用,否则创建新的实例
浏览器书签

3.singleTask模式

每次启动该Activity时,系统首先会检查栈中是否存在当前Activity实例,如果存在则直接使用,并把当前Activity上面的所有实例全部弹出栈
浏览器主界面

4.singleInstance模式

会启动一个新的任务栈来管理Activity实例,无论从哪个任务栈中启动该Activity,该实例在整个系统中只有一个
Android中的桌面使用的就是该模式
开启使用singleInstance模式的Activity分两种情况:一种是开启的Activity实例在栈中不存在,则系统会先创建一个新的任务栈,然后再压入Activity实例;另一种是要启动的Activity已存在,系统会把Acitivity所在的任务栈转移到前台,从而使Activity显示
来电界面

4.6使用Fragment

4.6.1Fragment简介

Fragment(碎片)是一种嵌入在Activity中的UI片段,它可以用来描述Activity中的一部分布局
如果Acitivity界面布局中的空间比较多比较复杂,那么Activity管理起来就很麻烦,我们可以使用Fragment把屏幕划分成几个片段,进行模块化的管理,从而使程序更加合理和充分利用屏幕的空间
一个Activity中可以包含多个Fragment,一个Fragment也可以在多个Activity中使用,如果在Activity中有多个相同的业务模块,则可以复用Fragment

4.6.2Fragment的生命周期

在这里插入图片描述
因为Fragment是被嵌入到Activity中使用的,因此它的生命周期的状态直接受其所属Activity的生命周期状态影响
在这里插入图片描述

4.6.3创建Fragment

创建Fragment时必须创建一个类继承自Fragment
在这里插入图片描述

4.6.4在Activity中添加Fragment

Fragment创建完成后并不能单独使用,还需要将Fragment添加到Activity中

1.在布局文件中添加Fragment

在这里插入图片描述
android:name属性值为Fragment的全路径名称

2.在Activity中动态加载Fragment

①创建一个Fragment的实例对象
②获取FragmentManager的实例
③开启FragmentTransaction
④向Activity的布局容器(一般是FrameLayout)中添加Fragment
⑤通过commit方法提交事务
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

so.far_away

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

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

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

打赏作者

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

抵扣说明:

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

余额充值