将启动后的Activity归纳到一个列表中去管理的时候,个人强烈建议是使用hashcode作为键值,因为一个进程的每个类的hashcode是不同的。比如lanchMode==singleTask的时候,Activity可能有多个,这个时候如果直接使用ActivityManager去关闭所有Activity的时候,有可能会漏掉。
import android.app.Activity;
import java.util.HashMap;
import java.util.Iterator;
/**
*
*/
public class ActivityManager {
private HashMap<Integer, Activity> activitys = new HashMap<>();
private static ActivityManager instance;
private ActivityManager() {
}
public static ActivityManager getInstance() {
if (instance == null) {
synchronized (ActivityManager.class) {
if (instance == null) {
instance = new ActivityManager();
}
}
}
return instance;
}
public void addActivity(Activity activity) {
activitys.put(activity.hashCode(), activity);
}
public Activity getActivity(int hashCode) {
return activitys.get(hashCode);
}
/**
* 返回列表中第一个出现classType的Activity
*
* @param classType 类型
* @return
*/
public Activity getActivity(Class classType) {
Iterator iterator = activitys.keySet().iterator();
while (iterator.hasNext()) {
Integer hashCode = (Integer) iterator.next();
Activity activity = activitys.get(hashCode);
if (classType.getCanonicalName().equals(activity.getClass().getCanonicalName())) {
return activity;
}
}
return null;
}
public void removeActivity(Activity activity) {
activitys.remove(activity.hashCode());
}
public void clearAll() {
activitys.clear();
}
}