Android基础知识_Activity生命周期

    Activity在系统中由Activity堆栈进行管理。当一个新的Activity被启动,它将被放置到堆栈的顶部,并且成为运行的Activity——先前的Activity在堆栈中总是保持在它的下面,并且直到新的Activity退出时将不会再一次成为前台。

    任何Activity本质上有四种状态:
    1.如果一个Activity在屏幕的前台(或在堆栈的顶部),它将是活动的或者正在运行着的。
    2.如果一个Activity已经失去焦点但是仍然可见(换言之,一个新的不能完全覆盖屏幕的或者透明的Activity在旧的Activity之上有焦点),它将是暂停的。一个已暂停的Activity是完全活着的(它维持所有状态和成员信息并且继续附属于窗口管理器),但是能被系统在内存不足的情况时杀死。
    3.如果一个Activity完全被其他Activity遮盖,它将是停止的。它仍然保持状态和成员信息,然而,它对使用者不再可见因此它的窗口是隐藏的并且它将经常在系统内存是必要的时候被杀死。
    4.如果一个Activity是暂停的或者停止的,系统能从内存的要求完成时除去Activity或者杀死它的进程。当它再一次显示给使用者,它必须完全地重新启动,恢复到它之前的状态。

    下面的图示展示了一个Activity的重要状态路径。直角矩形代表回调方法,当Activity在状态之间移动,你可以实现去执行操作。彩色的圆角矩形是Activity能处于的主要状态。


    在Activity里面有三个关键的循环你可能感兴趣去了解:
    1.一个Activity的完整生命周期(entire lifetime)发生在第一次调用onCreate(Bundle)到一个最终调用onDestroy()。一个Activity调用onCreate(Bundle)将完成所有设置,调用onDestroy()将释放所有剩下的资源。例如,如果有一个线程在后台运行从网络下载数据,它可能在onCreate(Bundle)创建线程,然后停止线程onDestroy();
    2.一个Activity的可见生命周期(visible lifetime)发生在调用onStart()到相应的调用onStop()之间。在此期间,用户能看到Activity在屏幕上,尽管它可能不是在前台与用户进行交互。在这两个方法之间你能保持需要向用户显示Activity的资源。例如,你能通过onStart()注册一个BroadcastReceiver去监测影响你的UI的变化,当用户不再看你的显示的时候通过onStop()注销。onStart()和onStop()方法可以随着Activity给用户隐藏或显示而多次调用。
    3.一个Activity的前台生命周期(foreground lifetime)发生在调用onResume()到相应的调用onPause()之间。在这段时间内,Activity是在所有其他的Activity前面与用户进行交互。一个Activity能频繁地运行在重新开始(resume)和暂停(pause)状态之间。例如,当设备进入睡眠状态,当Activity结果被交付,当一个新的意图被交付——所以这些方法的代码应该是轻量级的。

    Activity的整个生命周期被定义为以下Activity方法。所有这些方法当Activity改变状态时你能重写方法完成适当工作。所有Activity都将实现onCreate(Bundle)方法完成初始化设置,许多也将实现onPause()方法去提交更改数据,另外准备停止与用户进行交互。你应该调用你的父类实现这些方法。

public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }
    笔者的示例工程ActivityLifeCircleDemo,将重写以上七个方法,运行后通过虚拟仿真器AVD的Home键、返回键、任务管理器删除进程,在LogCat可以查看到相应方法的输出信息,该信息对应了Activity的生命周期。

// 主Activity文件MainActivity.java
package com.example.activitylifecircledemo;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/* 重写onCreate方法 */
		System.out.println("onCreate"); 
	}
	
	@Override
	protected void onStart() {
		// TODO Auto-generated method stub
		super.onStart();
		/* 重写onStart方法 */
		System.out.println("onStart");
	}
	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		/* 重写onResume方法 */
		System.out.println("onResume");
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		/* 重写onPause方法 */
		System.out.println("onPause");
	}
	
	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		/* 重写onStop方法 */
		System.out.println("onStop");
	}
	
	@Override
	protected void onDestroy() {
		// TODO Auto-generated method stub
		super.onDestroy();
		/* 重写onDestroy方法 */
		System.out.println("onDestroy");
	}
	
	@Override
	protected void onRestart() {
		// TODO Auto-generated method stub
		super.onRestart();
		/* 重写onRestart方法 */
		System.out.println("onRestart");
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

    Android API 中关于Activity生命周期的原文说明,可以查看此网址:

http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值