第二篇技术文档来了解下Activity。



什么是Activity?


activity 是android最常见的组件,是android 四大常用组件之一。activity是人机交互的界面,每一个actiivty都表示一个屏幕,应用程序会把它呈现给用户,应用程序越负责,需要的屏幕越多。



Activity的生存期


每一个Activity的状态是由它在Activity栈中所处的位置所决定的,Activity栈是当前所有正在运行的Activity的先进后出的集合。



当一个新的Activity启动时,它就变为Activity状态,并被移动到栈顶。



如果用户使用返回键返回到了刚才的Activity或者当前Acivity被关闭了,那么栈中下一个Activity就会移动到栈顶,激活成活动状态。





activity标志 android 安卓的activity_android



Activity的状态


随着Activity的创建与销毁,在栈中移出移进会经历4个状态。



activity标志 android 安卓的activity_ui_02



活动状态


当一个Actiivty位于栈顶的时候,它是可见的并且具有焦点的前台Activity。android将会不惜一切代价来保持它处于活动状态,并根据需要来销毁下面部分的Activity来保证这个Activity拥有它所需要的资源。


暂停状态


在某些情况下,activity是可见的,但是没有获得焦点,此时它就处于暂停状态。当一个透明或者非全屏的Activity位于该Activity之前时就是暂停状态。当Activity被暂停的时候,它仍然会被当作近似于活动状态的状态,



但是不能接收用户的输入事件。在极端的情况下,android也会终止暂停的Activity,为活动状态的Activity获取资源。


停止状态


当一个Activity不可见的时候,它就处于停止状态。此时Activity仍然会停留在内存中,保存所有的状态信息,然而android系统在其他地方需求使用内存的时候,它就会成为首要的候选对象。在一个Activity停止的时候,



保存数据和当前的UI状态以及停止任何关键操作都是很重要的。


非活动状态


当一个Activity被终止之后,在启动它之前它就处于非活动状态。处于非活动状态的Activity已经从Activity栈中移除了,因此在他们可以被显示和使用之前,需要被重新启动。



状态的转化是非确定性的,完全由android内存管理器处理。Android首先会关闭包含非活动状态Activity的应用程序,接着是停止的应用程序。只有极端情况下,才会销毁暂停的应用程序。


Activity的生命周期


为了保证Activity可以对状态改变做出反应,Android提供了一系列时间处理程序,当Actiivty在完整的,可见的和活动的生存期之间转化时,它们就会被触发。



activity标志 android 安卓的activity_activity_03




了解一个应用的生命周期,最好手动实践一下



package com.example.activitytest;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

	private static final String TAG = "testActivity";

	private Button button;

	// activity 创建初始调用
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		Log.i(TAG, "onCreate() called.");

		// TODO 初始化一个Activity 并且填充UI

		button = (Button) findViewById(R.id.button);

		button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {

				startActivity(new Intent(MainActivity.this,
						TranslucentActivity.class));

			}
		});
	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		Log.i(TAG, "onRestoreInstanceState() called.");

		// TODO Activity被系统杀死后再重建时被调用.
		// 例如:屏幕方向改变时,Activity被销毁再重建;当前Activity处于后台,系统资源紧张将其杀死,用户又启动该Activity.
		// 这两种情况下onRestoreInstanceState都会被调用,在onStart之后.
	}

	// 当activity 从停止状态到活动状态调用
	@Override
	protected void onRestart() {
		super.onRestart();
		Log.i(TAG, "onRestart() called.");
	}

	// 当activity创建或者从停止状态到活动状态调用
	@Override
	protected void onStart() {
		super.onStart();
		Log.i(TAG, "onStart() called.");
	}

	// 当activity创建或者从停止状态到活动状态调用
	@Override
	protected void onResume() {
		super.onResume();
		Log.i(TAG, "onResume() called.");
	}

	// 当activity处于暂停状态的时候 调用
	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		Log.i(TAG, "onSaveInstanceState() called.");
	}

	// 当activity处于暂停状态的时候 调用
	@Override
	protected void onPause() {
		super.onPause();
		Log.i(TAG, "onPause() called.");
		
		//TODO 在onPause方法中也可能进程会被终止所以有必要的花  也要保存所有的编辑或者状态改变
	}

	// 退出当前Activity或者跳转到新Activity时被调用
	@Override
	protected void onStop() {
		super.onStop();
		Log.i(TAG, "onStop() called.");

		// TODO 挂起不需要的UI更新,线程或处理
		// 当activity不可见时,保存所有的编辑或者状态改变,因为在调用这个方法后,进程可能会被终止
	}

	// 退出当前Activity时被调用,调用之后Activity就结束了
	@Override
	protected void onDestroy() {
		super.onDestroy();
		Log.i(TAG, "onStop() called.");

		// TODO 清理所有的资源,包括线程 关闭数据库连接等
	}

}



当项目刚启动的调用的是 onCreate() > onStart() > onResume() ,退出Actiivty调用的是onPause()>onStop()>onDestory()方法,结束当前Activity。



点击home键,Activity处于停止状态  调用的是onPause()>OnSaveInStanceState()>onStop(), 从停止状态返回到活动状态 调用的是onRestart()>onStart()>OnResume()



启动一个透明的Activity 当前activity处于暂停状态 调用的是OnPause>OnSaveInStanceState(),从暂停的状态返回到活动状态 调用的是OnResume()



当前Activity处于暂停状态或者停止状态,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate() > onStart() > onResume()。




参考书:Android 4 高级编程第三版