android开发------Activity生命周期
这几天工作比较忙,基本没有什么时间更新播客了。
趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征
什么是生命周期
在还没有接触android开发的时候,听到有人说Activity生命周期的时候,觉得这是一个很专业很深奥的东西。
但是在了解过之后,原来并不是那么一回事,这个Activity生命周期其实是很基础的东西,明白他们的原理对我们以后开发
编写优秀程序有很大帮助。
生命周期其实就是一个东西从出生到消亡的这段时间,那么Activity生命周期又是怎么一回事呢?
我们先借用官方的一张图说明一下,看下面的图。

从图中可见,在Activity的生命周期中,在不同的阶段都由不同他的函数控制它们的行为。当然这个行为可以由用户自己决定。
我们先不看图片左边的箭头,我们看的是图片中间和右边的部分。
周期第一阶段:活定阶段,即从lanucned到running阶段。
特征:处于窗口最前端,整个Activity都可以被用户看见
函数执行顺序:onCreate()->onStart()->onResume()
为了证明这些函数是确确实实被执行的,我们编写以下代码:
package com.aidevelops.activitys; import android.app.Activity;
import android.os.Bundle;
import android.util.Log; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Active", "onCreate method started");
} @Override
protected void onResume() {
super.onResume();
Log.d("Active", "onResume method started");
} @Override
protected void onStart() {
super.onStart();
Log.d("Active", "onStart method started");
} }
Log.d(tag, message)函数用于将指定tag的message打印到logcat控制台
我们可以将tag理解为一个分类
运行程序后打开LogCat窗口,创建一个条件过滤器
如图:

点击绿色的+号后弹出一个窗口:

注意Log.d()函数的第一个参数就是by log Tag中的Tag,第二个参数是要打印到LogCat控制台的信息
填好后点击OK。接着点刚才创建的LiifeCycle过滤器,就能看到下图的信息:

我们可以看到,每个函数都按顺序执行了。
第二阶段:暂停阶段
特征:Activity被部分遮挡。例如被半透明的窗口遮挡。
涉及的函数:onPause()、onResume()
第三阶段:停止阶段
特征:Activity完全被遮挡,例如打开了一个新的Activity。
涉及的函数:onPause()、onStop()
当用户导航回到之前停止的Activity的时候,就会触发已经停止的Activity重新启动。
涉及的函数:onRestart()->onStart()->onResume()
如图:
onPause和onStop是我们启动另一个Activity的时候触发的
而onRestart,onStart,onResume是我们点击后退键的时候触发的

大家有兴趣的可以自己写代码测试。只需要像上面的代码一样,覆盖相应的声明周期函数,填入你想测试的代码就可以了。
贴上完整代码:
package com.aidevelops.activitys; import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Active", "onCreate method started");
} @Override
protected void onResume() {
super.onResume();
Log.d("Active", "onResume method started");
} @Override
protected void onStart() {
super.onStart();
Log.d("Active", "onStart method started");
} @Override
protected void onPause() {
super.onPause();
Log.d("Active", "onPause method started");
} @Override
protected void onRestart() {
super.onRestart();
Log.d("Active", "onRestart method started");
} @Override
protected void onStop() {
super.onStop();
Log.d("Active", "onStop method started");
} public void onClickStartActivity(View view)
{
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent);
} }
那么知道这些东西对我们有什么作用,我们后面继续讲,因为博主已经累了,呵呵,大家都早点睡吧,早睡早起身体好,:-)
android开发------Activity生命周期的更多相关文章
- Android开发——Activity生命周期
Android开发--Activity生命周期 Activity作为四大组件之首,也是使用最频繁的一种组件.本文将主要讲解Activity生命周期,包括正常情况下的Activity生命周期和异常情况下 ...
- Android开发--Activity生命周期回顾理解
Activity和Servlet一样,都用了回调机制.我们通过类比servlet来学习Activity.当一个servlet开发出来之后,该servlet运行于Web服务器中.服务器何时创建servl ...
- android开发之生命周期
android开发之生命周期 一:Activity的生命周期: 这几天了了解了安卓Activity的生命周期,对于生命周期有了大概的理解: 一个Activity的生命周期也就是Activity从生成到 ...
- Android编程: Activity生命周期和LogCat使用
学习内容:Activity生命周期和LogCat使用 ====Activity生命周期==== 图示(转载): 创建 onCreate重启 onRestart开始 onStart恢复 ...
- 浅谈Android之Activity生命周期
Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的.今天我们就来详细地聊聊Ac ...
- android 17 activity生命周期
手机指南针传感器处于手机头部. Activity生命周期: 启动. onCreat()方法:初始化布局对象,设置监听器. onstart()方法:注册监听器. onResume():activity已 ...
- Android之Activity生命周期简介
概述 有图有真相,所以先上图: 上图是从Android官网截下的Activity的生命周期流程图,结构非常清晰,它描述了Activity在其生命周期中所有可能发生的情况以及发生的先后顺序,下面就将结合 ...
- 【Android】Activity 生命周期具体解释
与其它编程模式不同,android中的Activity没有main()函数.我们无法决定Activity的创建和销毁过程,Activiy的创建和销毁(即生命周期)由系统完毕,系统会在Activity的 ...
- Android关于Activity生命周期详解
子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...
随机推荐
- scp报错:not a regular file,解决方法:加参数 -r
命令:scp -P1234 /data/aa root@192.0.0..0:/data 文件结构:/data/aa/yearmonth=2015-09 报错:not a regular fi ...
- 如何把报表放到网页中显示(Web页面与报表简单集成例子)
1.问题描述 现在用户开发的系统基本上趋向于BS架构的浏览器/服务器模式,这些系统可能由不同的语言开发,如HTML.ASP.JSP.PHP等,因此需要将制作好的报表嵌入到这些页面中. FineRepo ...
- 大话设计模式C++版——原则和引言
转贴请注明转自:http://blog.csdn.net/gufeng99/article/details/45832711 读程杰的<大话设计模式>有一段时间了,将其C#版的设计模式代码 ...
- 150929-拖延高于懒-HTML(End)
四天未更了,分别是因为Xshell和虚拟机链接不好,累,懒(好像是三天..) 就像我一直嗷嗷着要去学开出一样,5年都没有去......拖延症似乎比懒癌更可怕.慢慢的慢慢的,人长大了,小时候的一些东西才 ...
- 彻底解决mysql中文乱码的办法,修改mysql解压缩版(免安装版或zip版)字符编码
MySQL会出现中文乱码的原因不外乎下列几点:1.server本身设定问题,例如server字符编码还停留在latin12.table的语系设定问题(包含character与collation)3.客 ...
- Golang tips
1.go test 测试单个函数 go test -v -test.run Test* 2.
- WAMP中phpMyAdmin登陆不了问题的解决方法
WAMP中phpMyAdmin登陆不了问题的解决方法
- ubuntu14安装Qt
首先下载Qt源码 https://download.qt.io/archive/qt/4.8/4.8.4/ 这里我下载的是qt-everywhere-opensource-src-4.8.4.tar. ...
- nmap脚本扫描使用总结
nmap的脚本默认目录为:/usr/share/nmap/scripts/ Nmap提供的命令行参数如下 -sC: 等价于--script=default,使用默认类别的脚本进行扫描 可更换其他类别 ...
- GridView EmptyDataTemplate 动态显示
以下语句加在GridView.DataBind()之后: Table GridViewTable = ((Table)gvGridView.Controls[]); if (!isSearch) (( ...