码迷,mamicode.com
首页 > 其他好文 > 详细

Activity生命周期

时间:2014-06-08 10:05:25      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:des   android   c   style   class   blog   

一、Activity有三种状态:

1、当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。 
        2、当它失去焦点但仍然对用户可见时,它处于暂停状态。即在它之上有另外一个Activity。这个Activity也许是透明的,或者没有完全覆盖全屏,所以被暂停的Activity仍对用户可见。暂停的Activity仍然是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接),但系统处于极低内存时仍然可以杀死这个Activity。 
简单的来说就是原activity被另一个activity不完全覆盖时处于暂停状态。
3、完全被另一个Activity覆盖时则处于停止状态。它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。 
也就是原activity被另一activity完全覆盖时处于停止状态。
二、Activty的生命周期方法
1、//创建activity时被回掉,这个方法只会被调用一次

voidonCreate(BundlesavedInstanceState)

2、//启动activity时被回调

voidonStart()

3、voidonRestart()

4、//恢复activity时被回调的方法

//只要执行onstart肯定会执行

voidonResume()

5//暂停activity时被回调的方法

voidonPause()

6、//停止activity时被回调的方法

voidonStop()

7、//销毁activity时被回调的方法
//只会被调用一次

voidonDestroy()

七个生命周期方法中嵌套了三个生命周期循环。

三个生命周期循环如图所示

bubuko.com,布布扣

  Activity完整生命周期自第一次调用onCreate()开始,直至调用onDestroy()为止。ActivityonCreate()中设置所有“全局”状态以完成初始化,而在onDestroy()中释放所有系统资源。例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程,而在onDestroy()销毁线程。

  Activity可视生命周期onStart()调用开始直到相应的onStop()调用结束。在此期间,用户可以在屏幕上看到Activity,尽管它也许并不是位于前台或者也不与用户进行交互。在这两个方法之间,我们可以保留用来向用户显示这个Activity所需的资源。例如,当用户不再看见我们显示的内容时,我们可以在onStart()中注册一个BroadcastReceiver来监控会影响UI的变化,而在onStop()中来注消。onStart()onStop()方法可以随着应用程序是否为用户可见而被多次调用。

  Activity前台生命周期onResume()调用起,至相应的onPause()调用为止。在此期间,Activity位于前台最上面并与用户进行交互。Activity会经常在暂停和恢复之间进行状态转换——例如当设备转入休眠状态或者有新的Activity启动时,将调用onPause()方法。当Activity获得结果或者接收到新的Intent时会调用onResume()方法。

三、测试Activity生命周期

目标1、测试当原Activity未被完全覆盖时 2、测试当测试当原Activity被完全覆盖时

创建三个界面

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣bubuko.com,布布扣bubuko.com,布布扣

在AndroidManifest.xml中以第一个Activity启动。并将第三个Activity设置属性android:theme="@android:style/Theme.Dialog,在启动第三个activity时就会以窗口形式打开。

具体MainActivity.java代码实现如下:

package www.gxw.com.activitylife;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private static final String TAG = "mainActivity";
	
	//创建activity时被回掉,这个方法只会被调用一次
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(TAG, "-----------onCreate----");
		
	}
	
	//启动activity时被回调
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		Log.i(TAG, "-----------onStart----");
	}

	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		Log.i(TAG, "-----------onRestart----");
	}

	//恢复activity时被回调的方法
	//只要执行onstart肯定会执行
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.i(TAG, "-----------onResume----");
	}

	//暂停activity时被回调的方法
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.i(TAG, "-----------onPause----");
	}

	//停止activity时被回调的方法
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		Log.i(TAG, "-----------onStop----");
	}

	//销毁activity时被回调的方法
	//只会被调用一次
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		Log.i(TAG, "-----------onDestroy----");
	}
		
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		// TODO Auto-generated method stub
		outState.putString("name", "liming");
		Log.i(TAG, "----------onSaveInstanceState--------------");
		super.onSaveInstanceState(outState);
	}

	//打开第三个activity
	public void openDialog(View v) {

		Intent intent = new Intent();
		intent.setClass(MainActivity.this, ThirdActivity.class);
		startActivity(intent);

	}

	//打开第二个activity
	public void openActivity(View v) {
		// TODO Auto-generated method stub
		Intent intent = new Intent();
		intent.setClass(MainActivity.this, SecondActivity.class);
		startActivity(intent);
	}
}

测试结果如下:

Activity启动时:

bubuko.com,布布扣

bubuko.com,布布扣

当Activity结束时:

bubuko.com,布布扣

bubuko.com,布布扣

当Activity被完全覆盖时:

bubuko.com,布布扣

bubuko.com,布布扣

完全覆盖返回时:

bubuko.com,布布扣

bubuko.com,布布扣

不完全覆盖时:

bubuko.com,布布扣

bubuko.com,布布扣

不完全覆盖返回时:

bubuko.com,布布扣

bubuko.com,布布扣

分析结果:

  1. onCreate():创建Activity调用,用于Activity的初始化,还有个Bundle类型的参数,可以访问以前存储的状态。
  2. onStart():Activity在屏幕上对用户可见时调用
  3. onResume():Activity开始和用户交互的时候调用,这时该Activity是在Activity栈的顶部。
  4. onPause():Activity被暂停时调用,也就是你要对你能看到的这个Activity说byebye的时候调用,这里可以做一些清理和保存工作
  5. onStop():Activity被停止或者Activity变成不可见时调用
  6. onDestroy():Activity被从内存中移除,一般发生在执行finish方法时或者Android回收内存的时候

Activity生命周期,布布扣,bubuko.com

Activity生命周期

标签:des   android   c   style   class   blog   

原文地址:http://blog.csdn.net/onepiece2/article/details/28627141

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!