android Activity管理器
应用场景
管理活动的Activity,可实现将一个activity添加到管理器、得到保存在管理器中的Activity对象、返回管理器的Activity是否为空、关闭所有活动的Activity除了指定的一个之外、移除Activity对象,如果它未结束则结束它、返回管理器中是否包含指定的名字,用于android开发时相当有用,例如我们在开发界面跳转比较频繁、定义android的HOME键、返回键如何跳转页面等项目时非常有用。
代码实现
/**
* @ClassName: ActivityTaskManager
* @Description: TODO(Activity管理器)
* @author lhn
* @date 2016-4-15 上午10:34:10
*/
public class ActivityTaskManager {
// 创建ActivityTaskManager
private static ActivityTaskManager activityTaskManager = null;
// 创建activity管理Map
private HashMap<String, Activity> activityMap = null;
/**
* @Description:返回Activity管理器的唯一实例对象(采用单例的实现模式)
* @return ActivityTaskManager(Activity管理器的唯一实例对象)
*/
public static synchronized ActivityTaskManager getInstance() {
// synchronized方法声明时使用,放在范围操作符(public等)之后,返回类型声明(void等)之前.
// 这时,线程获得的是成员锁,即一次只能有一个线程进入该方法,其他线程要想在此时调用该方法,只能排队等候,
// 当前线程(就是在synchronized方法内部的线程)执行完该方法后,别的线程才能进入.
if (activityTaskManager == null) {
activityTaskManager = new ActivityTaskManager();
}
return activityTaskManager;
}
/**
* @Description:向Activity管理器中添加Activity
* @param String
* actName(Activity的名称) Activity activity(要存入的Activity)
* @return void
*/
public void addActivity(String actName, Activity activity) {
// 先判断是否已经存在这个activity
if (!activityMap.containsKey(actName)) {
// 没有存在放入该activity
activityMap.put(actName, activity);
} else {
// 已经存在,则结束要存入的activity
activity.finish();
}
}
/**
* @Description 得到保存在管理器中的Activity对象。
* @param String
* actName(Activity的名称)
* @return Activity
*/
public Activity getActivity(String name) {
return activityMap.get(name);
}
/**
* @Description 返回管理器的Activity是否为空。
*
* @return 当且当管理器中的Activity对象为空时返回true,否则返回false。
*/
public boolean isEmpty() {
return activityMap.isEmpty();
}
/**
* @Description 返回管理器中Activity对象的个数。
*
* @return 管理器中Activity对象的个数。
*/
public int size() {
return activityMap.size();
}
/**
* @Description:removeActivity将不用的Activity移除
* @param String
* actName(Activity的名称)
* @return void
*/
public void removeActivity(String actName) {
// 得到该Activity的实例
Activity activity = activityMap.get(actName);
// 如果不为null,则结束掉该activity
if (activity != null)
activity.finish();
// 在activityMap中移除
activityMap.remove(actName);
}
/**
* @Description:finishAll结束掉所有Activity
* @return void
*/
public void finishAll() {
// 遍历所有的Activity找到后执行finish
for (String actName : activityMap.keySet()) {
Activity activity = activityMap.get(actName);
if (!activity.isFinishing()) {
activity.finish();
}
}
// 完全退出app,否则还有进程在后台
System.exit(0);
}
}