`
貌似掉线
  • 浏览: 255951 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

andriod一次退出所有的Activity

阅读更多
自己实现了一个Activity管理,可以实现一次退出所有的Activity。在Activity启动的时候,将调用里面的put方法,将Activity对象加入进来。在要退出某个activity的时候,将其remove。如果要退出所有的Activity,调用closeAllActivity即可。
/*
 * @(#)ActivityManager.java		       version: 0.1 
 * Date:2012-2-3
 *
 * Copyright (c) 2011 CFuture09, Institute of Software, 
 * Guangdong Ocean University, Zhanjiang, GuangDong, China.
 * All rights reserved.
 */
package com.sinaapp.msdxblog.androidkit.ui.util;

import java.util.HashMap;

import java.util.Set;

import android.app.Activity;

/**
 * 一个Activity管理器管理活动的Activity。
 * 
 * @author Geek_Soledad (66704238@51uc.com)
 */
public class ActivityTaskManager {

	private static ActivityTaskManager activityTaskManager = null;
	private HashMap<String, Activity> activityMap = null;

	private ActivityTaskManager() {
		activityMap = new HashMap<String, Activity>();
	}

	/**
	 * 返回activity管理器的唯一实例对象。
	 * 
	 * @return
	 */
	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
	 */
	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)) {
				continue;
			}
			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);
	}

	private final void finisActivity(Activity activity) {
		if (activity != null) {
			if (!activity.isFinishing()) {
				activity.finish();
			}
		}
	}
}

此类已经收录在我的工具包中,地址为:http://code.google.com/p/cfuture-androidkit/
本文原创,转载请注明原文地址:http://maosidiaoxian.iteye.com/blog/1404725
或我的另一个个人博客:http://msdxblog.sinaapp.com
0
0
分享到:
评论
2 楼 貌似掉线 2012-11-06  
avi9111 写道
想请问下你有没用过,好像没可能实现

如何调用这个类?

可以在Activity的onCreate方法中调用putActivity方法,如下:
引用

@Override
protected void onCreate(Bundle arg0) {
super.onCreate(arg0);
setContentView(R.layout.activity_travel);
ActivityTaskManager.getInstance().putActivity("TravelActivity", this);

然后在onDestroy方法中调用closeActivity方法。如果要退出所有的Activity(指加入到这里面的Activity),则如下:
引用
@Override
protected void onDestroy() {
if (mDB != null) {
mDB.close();
}
super.onDestroy();
ActivityTaskManager.getInstance().closeAllActivity();
}


其实这个类只是当初对Activity无法按流程依次退出时写的一个解决方案。如果在你的程序中,每个Activity的创建,退出的流程不乱,每个Activity的finish方法不论用户在怎样的操作过程下都有机会被调用,则不需要这个类了。
1 楼 avi9111 2012-11-05  
想请问下你有没用过,好像没可能实现

如何调用这个类?

相关推荐

Global site tag (gtag.js) - Google Analytics