您的位置:首页 > 移动开发 > Android开发

论如何写出优雅的Android代码--------ActivityManager

2015-04-25 23:00 1241 查看
我承认其实我就是想找个地方做做笔记,记录一下自己今天学到的东西,也许很多人看来,这是很基本的东西,但对于我而言,这的确是不错的收获。进入正题,首先是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来存储,就好像打开网页一样,越新打开的网页标签通常是越后的,反正就是先进后出。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: