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中,有两种方式实现对象的序列化。

image.png

我们可以通过实现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()在活动暂停后又被唤醒的时候,调用。

Android四剑客 — Activity_第1张图片
生命周期

1.下面是对每个生命周期函数详细说明:
  1. onCreate():在一个活动初次创建的时候调用,作为启动活动的第一个回调函数,我们一般在其中进行申明绑定UI控件,以及一些数据的初始化的操作。

  2. onStart():表示现在这个活动已经创建成功了,现在正在启动。是一个活动从不可见到可见的一个过度过程,所以Activity已经存在了,但就还是看不见的状态。

  3. onResume():字面意思,“将其唤醒”,表示现在Activity已经是可见的了。与onStart对比的话,可以认为onStart的时候,Activity还是在后台,当到达onResume的时候,新的Activity已经到前台了。

  4. onPause():表示该Activity正在停止,现在Activity仍然是可见的。常用来做一些保存关键数据的操作,onPause中不能进行耗时间的操作,会影响到后面的Activity出现的时间。onPause必须执行完了,新的活动的Activity的OnResume才能执行。

  5. onStop():表示现在该活动已经看不见,表示Activity已经停止,可以做一些轻量级回收工作。与onPause的区别,onPause是还看得见的,onStop是已经看不见了,所以,如果只是以一个对话框启动,或者一个dialog启动,onPause会执行,而onStop不会执行。

  6. onDetory():再该活动销毁前调用,表示该活动马上就要消失了,进行一些资源的回收工作。

  7. onRestart():重新启动一个活动,当一个活动为不可见状态变到重新可见的情况下进行。接下来是onStart(),即重新可见函数。

Android四剑客 — Activity_第2张图片
image.png
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.启动模式结构

Activity的管理采用栈的数据结构的方式。先进后出。

Android四剑客 — Activity_第3张图片

3.四种启动方式

standard:
标准启动模式,每次启动一个Activity压入栈顶。谁启动的Activity,这个Activity就运行在那个Activity所在的栈中。
如果一个Activity中,启动自己本身这个Activity,也会生成一个新的该活动实例。

Android四剑客 — Activity_第4张图片
standard

如果在Application和service中启动Activity,因为其没有所谓的栈,使用flag标识。
如:FLAG_ACTIVITY_NEW_TASK标记,创建一个新的栈。

singleTop:
栈顶复用模式,如果新建的Activity就是自己本身的话,就会重新加载该Activity,不会创建新的实例。

Android四剑客 — Activity_第5张图片
singleTop

singleTask:
栈内复用模式,是一种单例模式,即栈内有且只有一个该Activity的实例。
可以在AndroidMainfest.xml中在对activity配置的时候,通过teskAffinity申明需要加载在那一个栈中。
如果指定的栈中,新创建的Activity不存在,则新创建一个,并压入栈中。如果存在,就把该Activity之上的活动全部杀死,直到该Activity置于栈顶。

Android四剑客 — Activity_第6张图片
singleTask1

Android四剑客 — Activity_第7张图片
singleTask2

Android四剑客 — Activity_第8张图片
singleTask3

singleInstance:
单例模式,每一个Activity都在一个新的栈中

你可能感兴趣的:(Android四剑客 — Activity)