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的 ...
随机推荐
- simulate windows touch input
更多信息请参考页面http://social.technet.microsoft.com/wiki/contents/articles/6460.simulating-touch-input-in-w ...
- MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题
///MVC4.0中项目发布遇到IE11时session存入URL中,导致记不住密码的问题,在webconfig中配置<system.web><authentication mode ...
- Selenium+Python+Eclipse网页自动化集成环境配置(附简单的测试程序)
最近公司在给我们培训,主要是网页自动化测试的,现在的工作每天都是测APP,刚刚入门,不过,当我看了别人写的bug之后,就觉得不会觉得能够发现bug多么多么的厉害了. 前两周的时间一直在搭建自动化测试的 ...
- c++的类与对象
对象:此对象,非彼对象,:-D,跟妹子无关(不过貌似也可以,,),闲言少叙,书归正传 我们可以把我们见到的一切事物都称为对象.它可以有形,可以无形,可以简单,可以复杂,但是对某一种具体的对象,比如公司 ...
- 内省(Introspector)
内省(Introspector) 是Java 语言对 JavaBean 类属性.事件的一种缺省处理方法 目的:主要用于传递数据信息,这种类中的方法主要用于访问私有的字段(且方法名符合某种命名规则) p ...
- Jquery easyui中的有效性检查
使用过程中的一积累,备查. EasyUI 验证框使用方法: //*************************** missingMessage:未填写时显示的信息 validType:验证类型见 ...
- oracle 同时更新(update)多个字段多个值
--创建表A,B: create table A (a1 varchar2(33),a2 varchar2(33),a3 varchar2(33)); create table B (b1 varch ...
- Selenium2+python自动化13-多窗口、句柄(handle)
前言 有些页面的链接打开后,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口了.获取窗口的唯一标识用句柄表示,所以只需要切换句柄,我们就能在多个页面上灵活自如的操作了. 本篇以打开百 ...
- POJ 3352-Road Construction (图论-双边联通分支算法)
题目大意:一个图,要求你加入最少的边,使得最后得到的图为一个边双连通分支.所谓的边双连通分支,即不存在桥的连通分支(题目保证数据中任意两点都联通). 解题思路:先用tarjan算法进行缩点建立DAG图 ...
- 卸载Oracle步骤
卸载Oracle步骤:1.停止所有与ORACLE相关的服务.2. 使用OUI(Oracle Universal Installer)卸载Oracle软件. “开始”->“程序”->“O ...