美文网首页
Android四剑客 — Activity

Android四剑客 — Activity

作者: JokerHerry | 来源:发表于2017-12-12 10:17 被阅读0次

    本篇内容主要总结一下学习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()在活动暂停后又被唤醒的时候,调用。

    生命周期
    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(),即重新可见函数。

    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的管理采用栈的数据结构的方式。先进后出。

    3.四种启动方式

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

    standard

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

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

    singleTop

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

    singleTask1

    singleTask2

    singleTask3

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

    相关文章

      网友评论

          本文标题:Android四剑客 — Activity

          本文链接:https://www.haomeiwen.com/subject/reygixtx.html