Android学习整理之Activity生命周期篇
一、Activity生命周期说明
Activity的四种状态:
⒈活动状态(Active or Running):也称为运行状态,处于Activity栈顶,在用户界面中最上层,完全能被用户看到,能够与用户进行交互;
当一个activity的当前状态发生改变时,当前activity就会触发一系列的回调方法。这些回调方法很明白的阐述了activity生命周期的变化过程。
这些方法分别为:onCreat();onstart();onResume;onPause();onStop();onRestart();onDestroy();
二、生命周期图解说明

这张图,相信学习过android开发的大牛们都非常的熟悉了,但我还是图解一下:
1、当一个activity启动时,首先会调用onCreat();方法,然后调用onStart();方法,接下来调用onResume();方法。进入activity界面,此时的activity处于Running状态。
2、当一个不是全屏的activity被启动时(即当前activity被不完全遮住,dialog除外),那么当前activity首先会执行onPause();方法,当不是全屏的activity被从栈顶移除是,那么activity会执行onResume();方法。
3、当当前activity被新的activity完全覆盖时,或者按home回到主界面时,当前activity会执行,onPause(),onStop();方法,当回到当前activity时,会执行onRestart();onstart();onResume();方法。
4、当用户退出当前activity时会执行onPause();onStop();最后执行onDestroy();方法。
三、程序示例解释说明
package org.david.activitylifecycle; import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity implements OnClickListener { private static final String TAG = MainActivity.class.getSimpleName();
private Button btn_next, btn_halfActivity; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate()");
setContentView(R.layout.activity_main); // init---view
btn_next = (Button) findViewById(R.id.btn_next);
btn_halfActivity = (Button) findViewById(R.id.btn_halfActivity);
btn_next.setOnClickListener(this);
btn_halfActivity.setOnClickListener(this); } @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_next:
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
break;
case R.id.btn_halfActivity:
Intent intent2 = new Intent(this,HalfActivity.class);
startActivity(intent2);
break; }
} @Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onstart()");
} @Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart()");
} @Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume()");
} @Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause()");
} @Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop()");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy()");
} @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState()");
} @Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.i(TAG, "onNewIntent()");
} @Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState()");
} }
1、当前activity启动:

2、当启动一个新的activity,或者按home键:

注意:onSaveInstanceState();方法在onStop()之前调用,在onPause()之后调用。
这个地方与我之前看到过的一篇博客有出入,难道是sdk版本的问题?希望有知道的朋友给我解答下。
3、再次回到当前activity时,即由后台转到前台:

4、修改HalfActivity在AndroidManifest.xml中的配置,将android:theme属性设置为@android:style/Theme.Dialog。使之成为一个不全屏的activity。
有当前activity进入到HalfActivity:

再由HalfActivity退回当前activity:

5、当屏幕发生变化时,activity的生命周期也是会发生变化的。由竖屏----->横评和由横评----->竖屏生命周期的变化是一样的:

总结:理解生命周期对我们处理交互界面有大的帮助,同时也能使我们的程序更加的健壮。希望我们都能够有一个很好的理解。
补充:上篇中的activity的数据传递遗漏一种情况,这里补充一下:startActivityForResult(Intent, int);
MainActivity.java
Intent intent2 = new Intent(this,HalfActivity.class);
startActivityForResult(intent2, REQUEST_OK);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_OK){
String getData = data.getStringExtra("hello");
System.out.println(getData);
}
}
HalfActivity.java
tv_hello=(TextView) findViewById(R.id.tv_hello);
Intent intent = new Intent();
intent.putExtra("hello", tv_hello.getText().toString());
setResult(MainActivity.REQUEST_OK, intent);

感悟:北京已经连续一个星期的雾霾天气了,真心是让人感到心烦啊!!!
Android学习整理之Activity生命周期篇的更多相关文章
- android学习笔记28——Activity生命周期
Activity生命周期 Activity的活动状态由android已Activity栈的形式管理,当前活动的Activity位于栈顶.随着不同应用的运行,每个Activity都有可能从活动状态转入非 ...
- Android学习笔记:Activity生命周期详解
进行android的开发,必须深入了解Activity的生命周期.而对这个讲述最权威.最好的莫过于google的开发文档了. 本文的讲述主要是对 http://developer.android.co ...
- android学习笔记(5)Activity生命周期学习
每一个activity都有它的生命周期,开启它,关闭它,跳转到其他activity等等,都会自己主动调用下面某种方法.对这些个方法覆写后观察学习. protected void onCreate(Bu ...
- Android学习手记(2) Activity生命周期
1. 单个Activity的生命周期 当只有一个Activity的时候, 首先执行onCreate->onStart->onResume. 这时, 窗口便显示在屏幕上了. 然后我们按返回键 ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- Android全面解析之Activity生命周期
前言 很高兴遇见你~ 欢迎阅读我的文章. 关于Activity生命周期的文章,网络上真的很多,有很多的博客也都讲得相当不错,可见Activity的重要性是非常高的.事实上,我猜测每个android开发 ...
- Android 四大组件之Activity生命周期
写这篇博文之前,已经对android有一定的了解和认识.这篇博文主要讲述android的Activity的生命周期,这是android开发者必须掌握的知识.android的Activity组件拥有7个 ...
- Android查缺补漏--Activity生命周期和启动模式
一.生命周期 onCreate():启动Activity时,首次创建Activity时回调. onRestart():再次启动Activity时回调. onStart():首次启动Activity时在 ...
- 深入剖析Android四大组件(一)——Activity生命周期具体解释
1.管理Activity的生命周期 不管是正在执行的Activity还是没有执行的Activity,它们都接受Android的框架管理,这使得Activity处于不同的生命周期. ①Activity的 ...
随机推荐
- Android RadioGroup设置默认选中项
今天有人问.Android 里面 RadioGroup里面有两个RadioButton怎么设置默认值? 第一个RadioButton设置 android:checked="true" ...
- lintcode-【简单题】合并区间
题目: 给出若干闭合区间,合并所有重叠的部分. 样例: 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 1 ...
- C#如何定义全局变量
C#中没有全局变量的概念,可以定义一个common类,通过静态变量来存放所有需要的全局变量,调用的时候通过common来调用即可. 例如: public static class common // ...
- 在php中写接口时 对json格式的转换 简单的方法
方法 一 方法二 可以通过urlencode();遍历出来
- 3D图形学常用公式
本篇内容来自于书籍<3D图形学基础:图形与游戏开发>,个人总结 1.数学背景与历史 笛卡尔数学由著名的法国哲学家.物理学家.生物学家.数学家"勒奈·笛卡尔"发明. 1. ...
- 多个 git ssh key 配置 Ubuntu os
1.生成ssh key: ssh-keygen -t rsa -C “email@sss.com” 此时,在~/.ssh/文件夹下会有两个文件, id_rsa 和 id_rsa.pub.分别保存ssh ...
- 自己开发基于c#的垂直滚动条控件
由于Visual Studio工具箱中自带滚动条控件外观太老,而且没有颜色外观属性可设置. 所以自己就试着开发一个垂直的滚动条,它可以用来控制TextBox的滚动. 由于代码比较多,源文件已经打包到网 ...
- nginx的gzip选项和expire过期时间记录
最近,参加了公司的组织的一个公开课,收获还是挺多的,下面来总结接一下: 一. 使用nginx来进行网页内容的压缩编码与传输速度的优化: 先来观察一下news.sina.com.cn在请求和传输的时候发 ...
- 前端Html+Css——豆蔻年华(自学一个月)
详细见千万别碰我--燕十三 html .htm .shtml三者区别是什么 1..htm与.html没有本质上的区别,表示的是同一种文件,只是适用于不同的环境之下. 2.DOS仅能识别8+3的文件名, ...
- 自定义底部tab
public class MainActivity extends TabActivity implements OnCheckedChangeListener { private RadioGrou ...