Android四剑客 — Activity
本篇内容主要总结一下学习Activity过程中,一些重要的东西,以及需要注意的地方。
主要目录
- 什么是Activity
- Activity简介
- Activity切换方式
- Activity传递参数
- Activity的生命周期
- 生命周期函数
- 几种生命周期的案例
- Activity的启动模式
- 启动方式介绍
- 使用启动模式的几种方式
一、什么是Activity
1.简介
简单解释就是我们看到的app界面,他里面包括了展示的内容,以及展示内容与用户的交互逻辑,可以说用户都是通过Activity与app实现交互。
- 通常的Activity会占据所有的屏幕,但也可以支持只是占据小屏幕覆盖在其他屏幕之上;
- 我们使用的短信,电话也是一个Activity,支持自己的Activity中启动其他app的Activity;
2.Activity切换方式
活动基本用法
要启动一个活动,那就肯定需要使用到Intent。在使用Intent的基础上,有两种启动方式。
显式启动
找准你需要启动的活动,然后实现intent就可以直接启动。
Intent intent = new Intent(this.class,ActivityTow.class);
startActivity(intent);
隐式启动
采用一种含蓄的方式,在intent中并不说明你需要启动的是那一个活动,而是让系统自己去找。
因为很少用到,这里暂时不说,到时候再来补上。
3.活动中传递数据
普通参数
在使用Intent启动活动的时候,我们可以通过的intent的putExtra方法向下一个活动传递参数。
intent.putExtra(name,value);
通过键值对的方式,传递参数。
新开的活动可以通过getIntent().getStringExtra()等一些重载的函数,获取传递过来的参数。
String bili = getIntent().getStringExtra("bili");
传递对象
虽然putExtra方法里面已经包括了绝大多数我们需要传递的基本参数,但是如果我们需要的是传递一个对象的话,putExtra就会显得很尴尬了,毕竟你不可能分别传递每个变脸的值。
这个时候,我们想要传递我们的对象,就只有通过对象序列化的方法了。
Android中,有两种方式实现对象的序列化。
我们可以通过实现Serializable(Java提供)或者Parcelable (Android提供)来实现类的可序列化。
实现Serializable
public class People implements Serializable {
final int serialVersionUID = 123213;
......
}
serialVersionUID 是用来实现反序列化。
二、活动的生命周期
“咚咚咚,敲黑板,重点来了。”
{% asset_img 生命周期.png 生命周期%}
生命周期一共有7个回掉函数,表示整个活动从生成到死亡,以及中间的暂停状态中,一共经历了那些生命函数。
一个普通的生命周期为:
onCreate()->onStart()->onResume()->onPause()->onStop()->onDestory()
一共6个部分,还有一个onRestart()在活动暂停后又被唤醒的时候,调用。
1.下面是对每个生命周期函数详细说明:
-
onCreate():在一个活动初次创建的时候调用,作为启动活动的第一个回调函数,我们一般在其中进行申明绑定UI控件,以及一些数据的初始化的操作。
-
onStart():表示现在这个活动已经创建成功了,现在正在启动。是一个活动从不可见到可见的一个过度过程,所以Activity已经存在了,但就还是看不见的状态。
-
onResume():字面意思,“将其唤醒”,表示现在Activity已经是可见的了。与onStart对比的话,可以认为onStart的时候,Activity还是在后台,当到达onResume的时候,新的Activity已经到前台了。
-
onPause():表示该Activity正在停止,现在Activity仍然是可见的。常用来做一些保存关键数据的操作,onPause中不能进行耗时间的操作,会影响到后面的Activity出现的时间。onPause必须执行完了,新的活动的Activity的OnResume才能执行。
-
onStop():表示现在该活动已经看不见,表示Activity已经停止,可以做一些轻量级回收工作。与onPause的区别,onPause是还看得见的,onStop是已经看不见了,所以,如果只是以一个对话框启动,或者一个dialog启动,onPause会执行,而onStop不会执行。
-
onDetory():再该活动销毁前调用,表示该活动马上就要消失了,进行一些资源的回收工作。
-
onRestart():重新启动一个活动,当一个活动为不可见状态变到重新可见的情况下进行。接下来是onStart(),即重新可见函数。
2.生命周期常见情况:
活动第一次启动:onCreate->onStart->onResume;
新开了一个活动,然后返回上一个活动:onPause->onStop->onRestart->onStart->onResume
按下home键:onPause->onStop;
home键后重新回来:onRestart->onStart->onResume;
finish方法后:onRestart->onStart->Destroy;
3.生命周期特殊情况:
资源不足,导致优先级较低的Activity被杀死
横竖屏切换
还有一个onSaveInstanceState()函数,保证在活动结束前,一定能调用,用于储存重要数据。
活动的启动模式
1.启动模式类别
Android提供的4种Activity的启动模式
- standard(标准模式)
- singleTop(栈顶复用模式)
- singleTask(站内复用模式)
- singleInstance(单例模式)
在AndroidMainfest.xml中,通过给activity标签指定android:launchMode属性来选择启动模式。
2.启动模式结构
栈3.四种启动方式
standard:
标准启动模式,每次启动一个Activity压入栈顶。谁启动的Activity,这个Activity就运行在那个Activity所在的栈中。
如果一个Activity中,启动自己本身这个Activity,也会生成一个新的该活动实例。
如果在Application和service中启动Activity,因为其没有所谓的栈,使用flag标识。
如:FLAG_ACTIVITY_NEW_TASK标记,创建一个新的栈。
singleTop:
栈顶复用模式,如果新建的Activity就是自己本身的话,就会重新加载该Activity,不会创建新的实例。
singleTask:
栈内复用模式,是一种单例模式,即栈内有且只有一个该Activity的实例。
可以在AndroidMainfest.xml中在对activity配置的时候,通过teskAffinity申明需要加载在那一个栈中。
如果指定的栈中,新创建的Activity不存在,则新创建一个,并压入栈中。如果存在,就把该Activity之上的活动全部杀死,直到该Activity置于栈顶。
singleInstance:
单例模式,每一个Activity都在一个新的栈中