Activity的生命周期

晨曦之光 发布于 2012/05/16 17:05
阅读 336
收藏 1

 

ActivityAndroid最基本的组件之一,就像是一个管理员一样。初学者听到Activity的生命周期,可能会觉得这是一个比较概念性的东西,甚至有人会觉得为什么会有生命周期这种机制,但是随着深入Android编程,才会了解到它的重要性,下面我来总结一下Activity的生命周期吧。

1.  Activity的三种状态:运行,暂停和停止

1.1 运行状态:

Activity在屏幕的最前端(位于当前堆栈的顶部),它是可见的,有焦点的。可以进行处理用户的操作(点击,双击,长按)等,这就叫做激活或者运行状态,其中,当Activity处于运行状态的时候,Android会尽量保持它的运行,即使出现内存不足,也会杀死堆栈底部的Activity,来确保运行的Activity的正常运行。

1.2 暂停状态:

在某些情况下,Activity对用户来说是可见的,但是却不再拥有焦点,也就是用户对它的实际操作是没有用的,这时就叫做暂停状态,例如当最前端的Activity是透明或这没有全屏,下层的Activity仍然是可见的,这就是暂停的Activity,暂停的Activity是激活的,但是在系统的其它地方用到内存的时候可能会把暂停的Activity杀死

1.3停止状态:

Activity完全不可见时,它就处于停止状态,当时仍然保留着当前状态的成员和信息,只是对于用户来说是不可见的,当系统内存不足时也可能会把停止状态的Activity杀死

2. 1 生命周期事件:

Activity状态的变化是认为的操作,而这些状态的改变也会触及到其它一些事件,这就是生命周期事件,一共有7个,分别是void onCreate(),void onStart(),void onResume(),void onPause, void onStop(),void onRestart(),void onDestory();

2.2  Activity生命周期如下图所示:

2.3 举例来解释上图。

2.3.1 编写ActivityLifeCycleActivity.java。重写7个响应被触发的方法,以日志的形式输出响应的事件信息,代码如下:

package cn.csdn.android.life;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.AlertDialog.Builder;

import android.content.DialogInterface;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.widget.Button;

public class Activity_lifeActivity extends Activity {

   

private static final String TAG="lifeCycle";

    @Override

    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

Log.i(TAG, "onCreate");

      }

@Override

protected void onStart() {

// TODO Auto-generated method stub

super.onStart();

Log.i(TAG, "onStart");

}

@Override

protected void onResume() {

// TODO Auto-generated method stub

super.onResume();

Log.i(TAG, "onResume");

}

@Override

protected void onPause() {

// TODO Auto-generated method stub

super.onPause();

Log.i(TAG, "onPause");

}

@Override

protected void onStop() {

// TODO Auto-generated method stub

super.onStop();

Log.i(TAG, "onStop");

}

@Override

protected void onDestroy() {

// TODO Auto-generated method stub

super.onDestroy();

Log.i(TAG, "onDestroy");

}

@Override

protected void onRestart() {

// TODO Auto-generated method stub

super.onRestart();

Log.i(TAG, "onResult");

}   

}

1)然后运行程序,然后在LogCat控制台上看到结果如下图所示:

此时执行的方法是:onCreate ----->onStart------>onResume

2)  然后在虚拟机上点击返回,得到的结果如下图所示:

此时执行的方法是:onPause----->onStop----->onDestory

3) 当方法执行到这里的时候,这个Activity就已经被销毁了。重新启动此应用,调用的方法仍然是第一次启动时用到的方法:onCreate ----->onStart------>onResume,此时点击Home键会输出如下方法:onPause ---->onStop,如下图:

这时没有了onDestory()方法,即销毁方法,只是把这个Activity停止了

4) 长按 Home重新回到ActivityLiseCycle,运行的方法有:onResule ------>onStart---------->onResume

5)下面进行两个Activity之间的交换,从此体现出Activity之间的生命周期之间的切换,

在第一个Activity写一个按钮,通过按钮转到第二个Activity,运行的方法有:onPause---->onStop ,状态由暂停到停止,显示结果如下图:

点击第二个Activity的按钮,返回到第一个Activity时,运行到的方法:onStart-->onResume,应用开始运行

6)创建一个对话框样式,运行,可以看到下面的Activity,但是没有焦点,不能应用,只能应用对话框,运行切换到对话框时用到的方法只用onPause,而从对话框返回Activity时运行的方法onResume

7)创建一个对话框,并且通过对话框进行返回,这个时候并不能触发任何状态变化,也不会调用生命周期中的任何函数


原文链接:http://blog.csdn.net/xy849288321/article/details/7057531
加载中
返回顶部
顶部