自己实现了一个Activity管理,可以实现一次退出所有的Activity。在Activity启动的时候,将调用里面的put方法,将Activity对象加入进来。在要退出某个activity的时候,将其remove。如果要退出所有的Activity,调用closeAllActivity即可。
1 /* 2 * @(#)ActivityManager.java version: 0.1 3 * Date:2012-2-3 4 * 5 * Copyright (c) 2011 CFuture09, Institute of Software, 6 * Guangdong Ocean University, Zhanjiang, GuangDong, China. 7 * All rights reserved. 8 */ 9 package com.sinaapp.msdxblog.androidkit.ui.util; 10 11 import java.util.HashMap; 12 13 import java.util.Set; 14 15 import android.app.Activity; 16 17 /** 18 * 一个Activity管理器管理活动的Activity。 19 * 20 * @author Geek_Soledad (66704238@51uc.com) 21 */ 22 public class ActivityTaskManager { 23 24 private static ActivityTaskManager activityTaskManager = null; 25 private HashMap<String, Activity> activityMap = null; 26 27 private ActivityTaskManager() { 28 activityMap = new HashMap<String, Activity>(); 29 } 30 31 /** 32 * 返回activity管理器的唯一实例对象。 33 * 34 * @return 35 */ 36 public static synchronized ActivityTaskManager getInstance() { 37 if (activityTaskManager == null) { 38 activityTaskManager = new ActivityTaskManager(); 39 } 40 return activityTaskManager; 41 } 42 43 /** 44 * 将一个activity添加到管理器。 45 * 46 * @param activity 47 */ 48 public Activity putActivity(String name, Activity activity) { 49 return activityMap.put(name, activity); 50 } 51 52 /** 53 * 得到保存在管理器中的Activity对象。 54 * 55 * @param name 56 * @return 57 */ 58 public Activity getActivity(String name) { 59 return activityMap.get(name); 60 } 61 62 /** 63 * 返回管理器的Activity是否为空。 64 * 65 * @return 当且当管理器中的Activity对象为空时返回true,否则返回false。 66 */ 67 public boolean isEmpty() { 68 return activityMap.isEmpty(); 69 } 70 71 /** 72 * 返回管理器中Activity对象的个数。 73 * 74 * @return 管理器中Activity对象的个数。 75 */ 76 public int size() { 77 return activityMap.size(); 78 } 79 80 /** 81 * 返回管理器中是否包含指定的名字。 82 * 83 * @param name 84 * 要查找的名字。 85 * @return 当且仅当包含指定的名字时返回true, 否则返回false。 86 */ 87 public boolean containsName(String name) { 88 return activityMap.containsKey(name); 89 } 90 91 /** 92 * 返回管理器中是否包含指定的Activity。 93 * 94 * @param activity 95 * 要查找的Activity。 96 * @return 当且仅当包含指定的Activity对象时返回true, 否则返回false。 97 */ 98 public boolean containsActivity(Activity activity) { 99 return activityMap.containsValue(activity); 100 } 101 102 /** 103 * 关闭所有活动的Activity。 104 */ 105 public void closeAllActivity() { 106 Set<String> activityNames = activityMap.keySet(); 107 for (String string : activityNames) { 108 finisActivity(activityMap.get(string)); 109 } 110 activityMap.clear(); 111 } 112 113 /** 114 * 关闭所有活动的Activity除了指定的一个之外。 115 * 116 * @param nameSpecified 117 * 指定的不关闭的Activity对象的名字。 118 */ 119 public void closeAllActivityExceptOne(String nameSpecified) { 120 Set<String> activityNames = activityMap.keySet(); 121 Activity activitySpecified = activityMap.get(nameSpecified); 122 for (String name : activityNames) { 123 if (name.equals(nameSpecified)) { 124 continue; 125 } 126 finisActivity(activityMap.get(name)); 127 } 128 activityMap.clear(); 129 activityMap.put(nameSpecified, activitySpecified); 130 } 131 132 /** 133 * 移除Activity对象,如果它未结束则结束它。 134 * 135 * @param name 136 * Activity对象的名字。 137 */ 138 public void removeActivity(String name) { 139 Activity activity = activityMap.remove(name); 140 finisActivity(activity); 141 } 142 143 private final void finisActivity(Activity activity) { 144 if (activity != null) { 145 if (!activity.isFinishing()) { 146 activity.finish(); 147 } 148 } 149 } 150 }
此类已经收录在我的工具包中,地址为:http://code.google.com/p/cfuture-androidkit/