Activity是Android系统中的四大组件之一,是用户看得见摸得着的,可以用来显示View,可以这样说,几乎所有的Activity都是和用户进行交互的,有了Activity的存在,那些所谓Fragment,TextView等等所谓视图,所谓的控件才有了自己的安身立命。话可以说的绝点,你Android技术再牛逼,没有Activity,你一文不值,起码现在可以这样说。Activity的重要,是毋庸置疑的,那么一般我们项目中都会用到多个Activity,那么该如何对其管理呢?
public class ActivityTaskManager {
private static ActivityTaskManager activityTaskManager = null;
private HashMap<String, Activity> activityMap = null;
private ActivityTaskManager() {
activityMap = new HashMap<String, Activity>();
}
/**
* 返回activity管理器的唯一实例对象。
* @return ActivityTaskManager
*/
public static synchronized ActivityTaskManager getInstance() {
if (activityTaskManager == null) {
activityTaskManager = new ActivityTaskManager();
}
return activityTaskManager;
}
/**
* 将一个activity添加到管理器。
* @param activity
*/
public Activity putActivity(String name, Activity activity) {
return activityMap.put(name, activity);
}
/**
* 得到保存在管理器中的Activity对象。
* @param name
* @return Activity
*/
public Activity getActivity(String name) {
return activityMap.get(name);
}
/**
* 返回管理器的Activity是否为空。
* @return 当且当管理器中的Activity对象为空时返回true,否则返回false。
*/
public boolean isEmpty() {
return activityMap.isEmpty();
}
/**
* 返回管理器中Activity对象的个数。
* @return 管理器中Activity对象的个数。
*/
public int size() {
return activityMap.size();
}
/**
* 返回管理器中是否包含指定的名字。
*
* @param name
* 要查找的名字。
* @return 当且仅当包含指定的名字时返回true, 否则返回false。
*/
public boolean containsName(String name) {
return activityMap.containsKey(name);
}
/**
* 返回管理器中是否包含指定的Activity。
* @param activity
* 要查找的Activity。
* @return 当且仅当包含指定的Activity对象时返回true, 否则返回false。
*/
public boolean containsActivity(Activity activity) {
return activityMap.containsValue(activity);
}
/**
* 关闭所有活动的Activity。
*/
public void closeAllActivity() {
Set<String> activityNames = activityMap.keySet();
for (String string : activityNames) {
finisActivity(activityMap.get(string));
}
activityMap.clear();
}
/**
* 关闭所有活动的Activity除了指定的一个之外。
* @param nameSpecified
* 指定的不关闭的Activity对象的名字。
*/
public void closeAllActivityExceptOne(String nameSpecified) {
Set<String> activityNames = activityMap.keySet();
Activity activitySpecified = activityMap.get(nameSpecified);
for (String name : activityNames) {
if (!name.equals(nameSpecified)) {
finisActivity(activityMap.get(name));
}
}
activityMap.clear();
activityMap.put(nameSpecified, activitySpecified);
}
/**
* 移除Activity对象,如果它未结束则结束它。
* @param name
* Activity对象的名字。
*/
public void removeActivity(String name) {
Activity activity = activityMap.remove(name);
finisActivity(activity);
}
/**
* 结束指定的Activity
* @param activity
* 指定的Activity。
*/
private final void finisActivity(Activity activity) {
if (activity != null && !activity.isFinishing()) {
activity.finish();
}
}
}
下面介绍一种用Stack来管理自己Activity
public class AppManager {
private static Stack<Activity> activityStack;
private static AppManager instance;
private AppManager(){}
/**
* 单一实例
*/
public static AppManager getAppManager(){
if(instance==null){
instance=new AppManager();
}
return instance;
}
/**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
/**
* 退出应用程序
*/
public void AppExit(Context context) {
try {
finishAllActivity();
ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
activityMgr.restartPackage(context.getPackageName());
System.exit(0);
} catch (Exception e) { }
}
}
注意:在开发中这样的Activity管理类我们写好了,记得一定要添加,你才能删除,最好让所有的Activity继承一个父类,然后再父类中添加。