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()在活动暂停后又被唤醒的时候,调用。

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,也会生成一个新的该活动实例。

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • Activity 一、四种形态 运行状态: 当 Activity 处于栈的顶层,可见,并可与用户进行交互 onRe...
    任教主来也阅读 1,625评论 1 10
  • 关于为什么要写属于自己的博客,我在前一篇文章中也提到了。主要是归纳自己这一个时期所学到的知识,帮助自己更好的理解,...
    Kevin_Jern阅读 882评论 0 9
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w阅读 698评论 0 4
  • 早晨起床去上自习的路上,天空下起了细细的小雨。在新余难得看到几天太阳,都是阴阴绵绵。但是我喜欢雨,我认为雨的...
    她叫桑榆阅读 130评论 0 2
  • 写一篇小总结吧,俗话说“三十而立”,本篇是第三十篇,虽是文章,但对整部作品也有了初步的认识。 这部作品主要讲述的是...
    姜辣素阅读 73评论 0 0