我承认其实我就是想找个地方做做笔记,记录一下自己今天学到的东西,也许很多人看来,这是很基本的东西,但对于我而言,这的确是不错的收获。进入正题,首先是ActivityManager类,以前看别人的项目也看到过该类,不错当时没有深入了解具体的作用,现在又接触了,所以就相对深入的认识了一下。先看代码吧。
package com.hxm.progress;
import java.util.Stack;
import android.app.Activity;
public class ActivityManager {
private static Stack<Activity> sActivityStack = new Stack<Activity>();
private static ActivityManager instance;
private ActivityManager() {
}
public static ActivityManager getInstance() {
if (instance == null) {
instance = new ActivityManager();
}
return instance;
}
/**
* 退出栈顶Activity
*
* @param activity
*/
public void pop(Activity activity) {
if (activity != null) {
activity.finish();
sActivityStack.remove(activity);
// 要将activity 设为 null
activity = null;
}
}
/**
* 移除activity
*
* @param activity
*/
public void remove(Activity activity) {
if (activity != null) {
sActivityStack.remove(activity);
// 要将activity 设为 null
activity = null;
}
}
/**
* 获得当前栈顶Activity
*
* @return
*/
public Activity current() {
Activity activity = null;
if (sActivityStack.isEmpty()) {
return null;
} else {
activity = sActivityStack.lastElement();
}
return activity;
}
/**
* 将当前Activity推入栈中
*
* @param activity
*/
public void push(Activity activity) {
sActivityStack.add(activity);
}
/**
* 退出栈中cls上的所有Activity
*
* @param cls
*/
public void popAllActivityExceptOne(Class<Activity> clazz) {
while (true) {
Activity activity = current();
if (activity == null) {
break;
}
if (activity.getClass().equals(clazz)) {
break;
}
pop(activity);
}
}
/**
* 退出所有activity
*/
public void exit() {
while (true) {
Activity activity = current();
if (activity == null) {
break;
}
pop(activity);
}
}
}
这是一个ActivityManager类,直译就是activity的管理类,主要是通过栈(stack)的数据结构来存储和管理应用中所有的activity实例,每实例化一个activity的就向sActivityStack也就是activity栈中push一个元素,当activity执行到ondestory()方法时,stack就要pop一个元素。至于为什么要用stack来存储,就好像打开网页一样,越新打开的网页标签通常是越后的,反正就是先进后出。