Android学习总结(一)——Activity的基本概念与Activity的生命周期
一、Activity的基本概念
Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用于显示用户界面,用户通过Activity交互完成相关操作 , 一个App允许有多个Activity。
二、Activity的生命周期
Activity生命周期是每一个Android开发者都必须掌握的,当我们深入理解活动的生命周期之后,就可以写出更加连贯流畅的程序,让我们的程序拥有更好的用户体验
2.1、Activity的生命周期图
先上一张从图吧,图片看上去一目了然。图片来源(http://www.runoob.com/w3cnote/android-tutorial-activity.html)

2.2、Activity的四种状态
每个Activity在其生命周期中最多可能会有四种状态。
1.运行状态
当一个Activity位于返回栈(关于返回栈的概念下面再介绍)的栈顶时,这时Activity就处于运行状态,系统会将处于栈顶的Activity显示给用户。
2.暂停状态
当一个Activity不再处于栈顶位置,但仍然可见,这时Activity就进入了暂停状态。初学者可能会有这样的疑问,既然Activity都已经不在栈顶了,怎么会还可见呢,这是因为并不是每一个Activity都会占满整个屏幕的,比如对话框形式的Activity只会占用屏幕中间的部分区域。
3.停止状态
当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
4.销毁状态
当一个Activity从返回栈中移除后就变成了销毁状态。
2.3、Android返回栈
Android是使用任务(Task)来管理Activity的,一个任务就是一组存放在栈里的Activity集合,这个栈被称作返回栈,栈(堆栈)是一种先进后出的数据结构,这里顺便提一下另一种常见的数据结构:队列,队列是一种先进先出的数据结构。


每当启动一个新的Activity时,它会被放入返回栈中,并处于栈顶的位置。每当我们按下Back键或调用activity的finish()方法去销毁一个活动时,处于栈顶的Activity会出栈,这时前一个入栈的Activity就会重新处于栈顶的位置。系统总是会显示处于栈顶的Activity给用户。
2.4、Activity的生存期
Activity类中定义了7个回调方法,覆盖了Activity生命周期的每一个环节,下面来一一介绍这7个方法
1.onCreate()
这个方法在每一个Activity类都会有,当我们新建一个Activity类时,一定会重写父类的onCreate方法,onCreate方法会在Activity第一次被创建时调用。我们应该在这个方法中完成Activity的初始化操作,比如说加载布局,初始化布局控件,绑定按钮事件等。
2.onStart()
这个方法在Activity由不可见变为可见时调用。
3.onResume()
这个方法在Activity准备好喝用户交互的时候调用。此时的Activity一定位于返回栈的栈顶,并且处于运行状态。
4.onPause()
这个方法在系统准备去启动或者恢复另一个Activity的时候调用。
5.onStop()
这个方法在Activity完全不可见的时候调用。它和onPause()方法的主要区别在于,如果启动的新Activity是一个对话框式的activity,那么,onPause()方法会得到执行,而onStop()方法并不会执行。
6.onDestory()
这个方法在Activity被销毁之前调用,之后Activity的状态将变为销毁状态。
7.onRestart()
这个方法在Activity由停止状态变为运行状态之前调用,也就是Activity被重新启动了。
三、体验Activity的生命周期
前面介绍了关于Activity的点点滴滴,下面我们来亲自实战一下,新建一个LifecycleActivity,用于演示LifecycleActivity的生命周期,代码如下:
package com.nyl.activitysummary; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.Button; /**
* Activity生命周期演示
*/
public class LifecycleActivity extends Activity implements View.OnClickListener { private static final String TAG = LifecycleActivity.class.getSimpleName(); private Button btnNormal;
private Button btnDialog; /**
* activity第一次创建时被调用
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG,"onCreate()→android系统调用onCreate方法第一次创建LifecycleActivity,LifecycleActivity此时处于【运行状态】");
//去掉标题
requestWindowFeature(Window.FEATURE_NO_TITLE);
//加载布局
setContentView(R.layout.activity_lifecycle);
//初始化控件
initView();
} /**
* 初始化视图
*/
private void initView() {
btnNormal = (Button) findViewById(R.id.btnNormal);
btnDialog = (Button) findViewById(R.id.btnDialog); btnNormal.setOnClickListener(this);
btnDialog.setOnClickListener(this);
} @Override
public void onClick(View view) {
switch (view.getId()){
case R.id.btnNormal:
Intent intent = new Intent(LifecycleActivity.this,NormalActivity.class);
startActivity(intent);
break;
case R.id.btnDialog:
Intent intent1 = new Intent(LifecycleActivity.this,DialogActivity.class);
startActivity(intent1);
break;
}
} /**
* activity从后台重新回到前台(由不可见变为可见)时被调用
*/
@Override
protected void onStart() {
super.onStart();
Log.d(TAG,"onStart()→LifecycleActivity从后台重新回到前台(由不可见变为可见),android系统调用了onStart方法,LifecycleActivity此时处于【运行状态】");
} /**
* Activity准备好和用户进行交互的时候被调用
*/
@Override
protected void onResume() {
super.onResume();
Log.d(TAG,"onResume()→LifecycleActivity准备好和用户进行交互的,android系统调用了onResume方法,LifecycleActivity此时处于【运行状态】");
} /**
* Activity准备去启动或者恢复另一个Activity的时候调用
*/
@Override
protected void onPause() {
super.onPause();
Log.d(TAG,"onPause()→LifecycleActivity准备去启动另一个Activity,android系统调用了onPause方法,LifecycleActivity此时处于【暂停状态】");
} /**
* 退出当前Activity或者跳转到新Activity时被调用
* Activity完全不可见的时候调用
*/
@Override
protected void onStop() {
super.onStop();
Log.d(TAG,"onStop()→LifecycleActivity已经完全不可见了,android系统调用了onStop方法,LifecycleActivity此时处于【停止状态】");
} /**
* 退出当前Activity时被调用,调用之后Activity就结束了
*/
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG,"onDestroy()→LifecycleActivity已经准备被销毁了,android系统调用了onDestroy方法,LifecycleActivity此时处于【销毁状态】");
} /**
* Activity从后台重新回到前台时被调用
*/
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG,"onRestart()→LifecycleActivity由【停止状态】变为【运行状态】,android系统调用了onRestart方法,LifecycleActivity此时处于【运行状态】");
}
}
为了演示生命周期,我们还需要分别再创建两个子Activity,分别为NormalActivity和DialogActivity,代码如下:
package com.nyl.activitysummary; import android.app.Activity;
import android.os.Bundle;
import android.view.Window; /**
* 正常显示的Activity
*/
public class NormalActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_normal);
}
}
package com.nyl.activitysummary; import android.app.Activity;
import android.os.Bundle;
import android.view.Window; /**
* 以Dialog的形式展示的Activity
*/
public class DialogActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_dialog);
}
}
在LifecycleActivity的onCreate方法中,分别注册了两个按钮的点击事件,点击第一个按钮会启动NormalActivity,点击第二个按钮会启动DialogActivity,然后我们在LifecycleActivity的7个回调方法中通过Log打印一句话,这样就可以通过观察日志的方式来清楚地看到LifecycleActivity的生命周期
LifecycleActivity的生命周期控制台打印日志效果如下:

关于Activity的基本概念与Activity的生命周期的总结内容就写这么多。
Android学习总结(一)——Activity的基本概念与Activity的生命周期的更多相关文章
- Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- [源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期
[源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Worker生命周期 目录 [源码解析] 深度学习分布式训练框架 horovod (16) --- 弹性训练之Work ...
- Netty 学习(四):ChannelHandler 的事件传播和生命周期
Netty 学习(四):ChannelHandler 的事件传播和生命周期 作者: Grey 原文地址: 博客园:Netty 学习(四):ChannelHandler 的事件传播和生命周期 CSDN: ...
- Android学习笔记_22_服务Service应用之—与Activity进行相互通信的本地服务
一.启动服务的两种方法方法: 第一种: startService()和stopService()启动关闭服务.适用于服务和Activity之间没有调用交互的情况.如果相互之间需要方法调用或者传递参数 ...
- Activity的基本概念与Activity的生命周期
一.Activity的基本概念 Activity是Android的四大组件之一,它是一种可以包含用户界面的组件,主要用于和用户进行交互,比如打电话,照相,发送邮件,或者显示一个地图!Activity用 ...
- [原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Kubernetes学习之路(十一)之Pod状态和生命周期管理
一.什么是Pod? Pod是kubernetes中你可以创建和部署的最小也是最简的单位.一个Pod代表着集群中运行的一个进程. Pod中封装着应用的容器(有的情况下是好几个容器),存储.独立的网络IP ...
- spring学习笔记(四)我对spring中bean生命周期的理解
我相信大部分同学对spring中bean的生命周期都不陌生,但是如果要详细的说出每一个步骤,可能能说出来的也不多,我之前也是这样,前几天调了一下spring的源码,看了一点书,突然一下明朗了,理解了s ...
- Android学习笔记(5)----启动 Theme.Dialog 主题的Activity时程序崩溃的解决办法
新建了一个Android Studio工程,在MainActivity的主界面中添加了两个按钮,点击其中一个按钮用来启动 NormalActivity,点击另一按钮用来启动DialogActivity ...
随机推荐
- JavaScript易错点转载
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
- 利用 Grunt (几乎)无痛地做前端开发 (一)之单元测试
前言 如果你想开发一个js应用,甭管多简单,都要先创建整个宇宙 来看看我们的Javascript小宇宙: 确定如何根据需求.功能划分模块,如何将代码分成多个文件开发,合成一个发布 保证上一条的同时,使 ...
- CSS3 :target伪类实现Tab切换效果 BY commy
http://www.shejidaren.com/examples/css3-target/css3-target.html#tab1 标签一 标签二 标签三 欢迎加设计达人Q群:50063010设 ...
- Spring @Aspect切面参数传递
Spring @Aspect切面参数传递: Xml: <?xml version="1.0" encoding="UTF-8"?> <bean ...
- EntityFramework Core解决并发详解
前言 对过年已经无感,不过还是有很多闲暇时间来学学东西,这一点是极好的,好了,本节我们来讲讲EntityFramewoek Core中的并发问题. 话题(EntityFramework Core并发) ...
- SQL Server如何固定执行计划
SQL Server 其实从SQL Server 2005开始,也提供了类似ORACLE中固定执行计划的功能,只是好像很少人使用这个功能.当然在SQL Server中不叫"固定执行计划&qu ...
- Charlse 使用小记
抓包神器Fiddler 是基于微软的 .Net 技术开发的,没办法直接在 Mac/Linux 下使用,而Charlse是Mac下常用的网络封包截取工具.是一个HTTP代理服务器,HTTP监视器,反转代 ...
- 修改/home内子目录的名字
每次装Linux系统我都会直接安装英文版,虽然中文版方便使用,但是在终端里面会有诸多不便,例如/home目录里面那些子文件夹就是一个很大的麻烦了,不过如果你安装了中文版的系统,还是有办法改成英文的. ...
- 关于Task的一点思考和建议
前言 本打算继续写SQL Server系列,接下来应该是死锁了,但是在.NET Core项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心 ...
- 自述创业史 | XMove动作感应系统(二)
XMove是沙漠君和几个死党从2010年开始开发的一套人体动作捕捉系统,软硬件全部自行开发,投入了大量的精力,历经三年,发展四个版本.文章分上下篇,本文为下篇,前三代的故事在<光荣与梦想| XM ...