Android之Activity生命周期史无前例的详细介绍,新手必必必看
来源:互联网 发布:全世界人民都知道知乎 编辑:程序博客网 时间:2024/04/30 04:54
Android之Activity生命周期史无前例的详细介绍,新手必必必看
作者:周晓栋,Q,Q:360511404
Android的Activity生命周期是一个非常重要的知识点,但是由于Activity的状态众多,而且状态直接的切换类型也十分的众多,导致Activity的方法很多,这就给新手学习并理解Activity造成了一定的难度,如果你能认真读完我这一篇博文,那么我相信你一定能对Activity的理解达到一个崭新的高度,ok,下面是我对Activity的理解。
要想透彻的理解Activity,那么必须了解一个计算机的名词,“堆栈”,因为Activity的状态切换方式十分类似于数据结构中的堆栈。
1、首先介绍什么是堆栈,及其特点。
2、介绍Activity的七个状态方法。
3、结合堆栈,详解Activity状态直接的切换和各个方法的调用。
1)、下面我来介绍一下什么是“堆栈”。
堆栈 可以简单的理解成一个的 “竹筒”,只不过种竹筒是一端封闭另一端开启的,如图所示:
透过这个竹筒我们不难发现,因为堆栈的一端是封闭的,所以要想往里面放东西,必须从一端放,取的时候也只能从一端取,就是这堆栈最重要的特点,“后进先出”。
2)、下面我要介绍的是Activity的七个状态方法。
附官方文档图一张:
然后附我代码一篇:
package cn.blue.life;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class LifteActivity extends Activity {Button bt;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText("第一个activity");bt.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent=new Intent(LifteActivity.this,LifteActivitySecond.class);startActivity(intent);}});Log.i("Mytag","First----onCreate");}protected void onDestroy() {Log.i("Mytag","First----onDestroy");super.onDestroy();}protected void onPause() {Log.i("Mytag","First----onPause");super.onPause();}protected void onRestart() {Log.i("Mytag","First----onRestart");super.onRestart();}protected void onResume() {Log.i("Mytag","First----onResume");super.onResume();}protected void onStart() {Log.i("Mytag","First----onStart");super.onStart();}protected void onStop() {Log.i("Mytag","First----onStop");super.onStop();}//protected void onRestoreInstanceState(Bundle savedInstanceState) {//Log.i("Mytag","First----onRestoreInstanceState");//super.onRestoreInstanceState(savedInstanceState);//}//protected void onSaveInstanceState(Bundle outState) {//Log.i("Mytag","First----onSaveInstanceState");//super.onSaveInstanceState(outState);//}}
onCreate(Bundle savedInstanceState)
onStart()
onResume()
onPause()
onStop()
onDestroy()
onRestart()
onCreate(Bundle savedInstanceState)
Activity的初始化,也就是一个全新的Activity开始时,调用该方法
onStart()
Activity的启动,当你能够看到Activity时,启动该方法,
onResume()
当Activity获取用户焦点将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它
onPause()
当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。
如果activity重新回到前景时将调用onResume(), 如果对用户彻底不可见则会调用onStop()。
onStop()
当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。
当activity重新回到前景与用户交互时调用onRestart(),如果activity将退出则调用onDestory()。
onDestroy()
在你的activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况
onRestart()
当activity从停止状态重新启动时调用。其后调用onResume()。
3)、结合堆栈,详细介绍Activity的生命周期和状态切换;
下面附上我三个Activity的代码,嘎嘎,
package cn.blue.life;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class LifteActivitySecond extends Activity {Button bt;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText("第二个activity");bt.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent=new Intent(LifteActivitySecond.this,LifteActivityDialog.class);startActivity(intent);}});Log.i("Mytag","Second---onCreate");}protected void onDestroy() {Log.i("Mytag","Second---onDestroy");super.onDestroy();}protected void onPause() {Log.i("Mytag","Second---onPause");super.onPause();}protected void onRestart() {Log.i("Mytag","Second---onRestart");super.onRestart();}protected void onResume() {Log.i("Mytag","Second---onResume");super.onResume();}protected void onStart() {Log.i("Mytag","Second---onStart");super.onStart();}protected void onStop() {Log.i("Mytag","Second---onStop");super.onStop();}protected void onRestoreInstanceState(Bundle savedInstanceState) {Log.i("Mytag","Second----onRestoreInstanceState");super.onRestoreInstanceState(savedInstanceState);}protected void onSaveInstanceState(Bundle outState) {Log.i("Mytag","Second----onSaveInstanceState");super.onSaveInstanceState(outState);}}
package cn.blue.life;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class LifteActivityDialog extends Activity {Button bt;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.main);bt=(Button) this.findViewById(R.id.bt);bt.setText("一个小对话框");bt.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent=new Intent(LifteActivityDialog.this,LifteActivity.class);startActivity(intent);}});Log.i("Mytag","Dialog---onCreate");}protected void onDestroy() {Log.i("Mytag","Dialog---onDestroy");super.onDestroy();}protected void onPause() {Log.i("Mytag","Dialog---onPause");super.onPause();}protected void onRestart() {Log.i("Mytag","Dialog---onRestart");super.onRestart();}protected void onResume() {Log.i("Mytag","Dialog---onResume");super.onResume();}protected void onStart() {Log.i("Mytag","Dialog---onStart");super.onStart();}protected void onStop() {Log.i("Mytag","Dialog---onStop");super.onStop();}protected void onRestoreInstanceState(Bundle savedInstanceState) {Log.i("Mytag","Dialog----onRestoreInstanceState");super.onRestoreInstanceState(savedInstanceState);}protected void onSaveInstanceState(Bundle outState) {Log.i("Mytag","Dialog----onSaveInstanceState");super.onSaveInstanceState(outState);}}
先启动第一个Activity,看一下效果
我们到看地第一个Activity的启动,调用了三个方法,分别是,onCreate(),onStart(),onResume(),
他们分别表示初始化Activity,显示Activity,获取用户焦点,可以进行操作。
堆栈图:
现在,我们有三种操作方式,分别是:
一,点击后退键;
二,点击home键;
三,启动第二个Activity;
我给大家一一分析这三种情况:
第一种情况,后退键,将会把最顶层的Activity一从堆栈中移除,的直接销毁
启动到退出,一共执行了6个方法,这就是Activity的生命周期,最简单,最正常的,没有任何打断的生命周期,但是就像人一样,难免会生个病,出个车祸什么的,所以,下面介绍第二种和第三种;
上图是我点击了home键之后的执行结果,我们看到又执行了两个方法,分别是onPause和onStop,但是并没有onDestroy,说明Activity并没有被杀掉;而是留在了堆栈之中,处于一种不可见的状态,如果这时候我们又启动这个Activity,会发生什么情况,接下来看图
现在我们看到它又执行了三个方法,分别是onRestart,onStart,onResume,
分别是回到启动,启动,重新获取用户的焦点,从这里我们不难看出,后退键杀死了处于堆栈最上方的Activity,而home键并没有杀死Activity,而是将其处于一种不可见的状态,可以随时恢复;
下面介绍第三种情况,比较复杂;
当我们点击按钮启动第二个Activity时,会发生什么情况,看图:
这次一共调用了5个方法,我来一一说明:
首先是onPause,它将第一个Activity暂停,然后创建第二个Activity,启动它,获取用户焦点,这个时候第一个Activity将处于不可见状态,所以调用其onStop方法,堆栈:
接下来分为两种情况;一种是点击后退键,一种是点击home键
先看点击后退键的情况:
后退,也就是启动上一个Activity,这时先将当前的Activity暂停,onPause,然后启动上一个Activity,启动直到获取用户焦点,就把第二个Activity销毁;
如果点击home键,参考前面的情况;
下面介绍什么时候调用Activity可见,但是失去用户焦点后,再次获取用户焦点的情况,也就是调用onPause,再调用onResume
这种情况是第三个Activity启动,但是样式是对话框,并没有将第二个Activity完全遮挡,所以第二个Activity只调用了onPause,这时候后退
时间关系,未完待续.......
- Android之Activity生命周期史无前例的详细介绍,新手必必必看
- Android之Activity生命周期详细介绍,新手必必必看
- Android Activity生命周期简明、详细介绍
- Android之Activity 生命周期介绍【图解】
- Activity详细介绍及其生命周期
- Android之Activity的生命周期
- Android之Activity的生命周期
- Android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- android之Activity的生命周期
- Android之Activity的生命周期
- Android之activity的生命周期
- Android之Activity的生命周期
- android Activity生命周期介绍
- Android 中 Activity的生命周期简单描述(新手)
- Activity的生命周期介绍
- eclipse中导入dom4j包
- vbscript和javascript互相调用方法
- 在office2010的情况下安装xcelsius2008的方法收集
- Java之reflect 反射机制
- linux 下查找文件和字符串命令 find grep
- Android之Activity生命周期史无前例的详细介绍,新手必必必看
- Android的按钮单击事件及监听器的实现方式
- 不再迷惘,执着于我的方向
- "我"的名字狠牛
- 编辑时,已存在的复选框,默认被勾选
- 玛雅人五大预言原文
- 通过 DomainDataSource 实现数据的添加、查询、更新和删除操作
- tab事件改为回车事件
- 一对多 如何使多的一端信息在页面上同一行中友好显示