Android Activity生命周期详解

       四大组件之一的Activity组件,在应用中一个Activity可以用来表示一个界面,中文意思也可以理解为“活动”,即一个活动开始,代表Activity组件启动,活动结束,代表一个Activity的生命周期结束。一个android应用必须通过Activity来运行和启动,Activity的生命周期交给系统统一管理。

      有时间的童鞋还可以去理解以下四个基本概念,将有助于我们更好的了解Android系统内部机制:

Application、Activity、Activity栈、Task

Android Activity生命周期详解_第1张图片

三大基本状态:

  1. Resumed:一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

  2. Paused:当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦健,所以不可与用户交互。

  3. Stoped:当Activity被另外一个Activity覆盖、失去焦点并不可见时处于的状态。    

Activiy的生命周期:

  1. onCreate(Bundle savedInstanceState);

  2. onStart();

  3. onRestart();

  4. onResume();

  5. onPause();

  6. onStop();

  7. onDestroy();

    Activity其实是继承了ApplicationContext这个类,我们可以重写以下方法,如下代码:

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();
}

       为了便于理解,我们可以写一个Demo,通过一定的操作来观察Activity在生命周期中状态的变化情况。

第一步:新建一个Android工程,我这里命名为ActivityDemo.

第二步:修改ActivityDemo.java(我这里重新写了以上的七种方法,主要用Log打印),代码如下:

package com.example.activityins;

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

/**
 * Activity的三大状态和七大生命周期方法分析
 */
public class MainActivity extends Activity {

	/**
	 * Activity创建时第一个调用的方法,通常我们再该方法中加载布局文件,初始化UI组件,事件注册等等
	 */
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		System.out.println("MainActivity-onCreate");
	}

	/**
	 * 再onCreate方法之后调用,用于显示界面,但当前用户还不能进行交互
	 */
	@Override
	protected void onStart() {
		super.onStart();
		System.out.println("MainActivity-onStart");
	}

	/**
	 * 当activity从stopped状态下被返回时调用,之后再调用onResume方法进入resumed状态
	 */
	@Override
	protected void onRestart() {
		super.onRestart();
		System.out.println("MainActivity-onRestart");
	}

	/**
	 * 在onStart方法后调用,执行完了该方法后,用户可进行交互,当前Activity进入resumed状态
	 * 当activity从Paused状态被重新返回时,会再次调用该方法,让Activity进入resumed状态
	 */
	@Override
	protected void onResume() {
		super.onResume();
		System.out.println("MainActivity-onResume");
	}

	/**
	 * 当其他Activity(透明或窗口模式)进入时,调用该方法,让当前Activity进入paused状态
	 * 当前Activity依然是可见状态,但不可交互。如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁
	 * 当前Activity被返回时调用onResume方法
	 */
	@Override
	protected void onPause() {
		super.onPause();
		System.out.println("MainActivity-onPause");
	}

	/**
	 * 当其他Activity完全覆盖该Activity时,调用该方法,当前Activity进入stopped状态
	 * 当前Activity是不可见状态。如果其他更高优先级的APP需要内存时,当前Activity可能会被销毁
	 * 当前Activity被返回时调用onRestart方法
	 */
	@Override
	protected void onStop() {
		super.onStop();
		System.out.println("MainActivity-onStop");
	}

	/**
	 * 当前activity被销毁时调用,通常在该方法中用来释放资源,当前activity被kill掉
	 */
	@Override
	protected void onDestroy() {
		super.onDestroy();
		System.out.println("MainActivity-onDestroy");
	}
}

接下来就是测试了,我们一边操作一边观察LogCat中的打印:

第一步:启动项目

在这一步骤中,Activity先后执行了onCreate()->onStart()->onResume()三个方法。

第二步:点击HOME键回到桌面

执行了onPause()->onStop()两个方法,这个时候,activity依然存在,只是我们看不到了,但并没有被销毁。

第三步:再次点击应用图标回到程序中,恢复页面

执行了onRestart()->onStart()->onResume()三个方法

第四步:点击BACK键退出程序

执行了onPause()->onStop()->onDestroy()三个方法,这个时候,程序被销毁。

第五步:在启动程序(也就是第一步)后,我们点击电源键锁屏

第六步:点击电源键点亮屏幕,并解锁

还有其他的情况,比如,在第一步后面,从任务切换的地方进入另一个应用程序,然后再回到我们的测试程序中,等等。

这些大家可以自己下来试一试。

现在,我们再回到上面去看Activity生命周期图,相信大家都能很容易的理解这张图了。

你可能感兴趣的:(android,生命周期)