android activity 管理工具类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
import java.util.Stack;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;

public class AppManager {
	
	private static Stack<Activity> activityStack;
	private static AppManager instance;

	private AppManager(){
	}

	/**
	 * 功能描述:获取AppManager对象,单例模式
	 * @return
	 */
	public static AppManager getAppManager(){
		if (instance == null){
			instance = new AppManager();
		}
		return instance;
	}
	
	/**
	 * 功能描述: 添加Activity到堆栈
	 * @param activity
	 */
	public void addActivity(Activity activity){
		if (activityStack == null){
			activityStack = new Stack<Activity>();
		}
		activityStack.add(activity);
	}

	/**
	 * 功能描述: 获取当前Activity(堆栈中最后一个压入的)
	 * @return
	 */
	public Activity currentActivity(){
		Activity activity = activityStack.lastElement();
		return activity;
	}

	/**
	 * 功能描述: 结束当前Activity(堆栈中最后一个压入的)
	 */
	public void finishActivity(){
		Activity activity = activityStack.lastElement();
		finishActivity(activity);
	}

	/**
	 * 功能描述: 结束指定的Activity
	 * @param activity
	 */
	public void finishActivity(Activity activity){
		if (activity != null){
			activityStack.remove(activity);
			activity.finish();
			activity = null;
		}
	}

	/**
	 * 功能描述: 移除指定的Activity
	 * @param activity
	 */
	public void removeActivity(Activity activity){
		if (activity != null){
			activityStack.remove(activity);
			activity = null;
		}
	}

	/**
	 * 功能描述: 结束指定类名的Activity
	 * @param cls
	 */
	public static void finishActivity(Class<?> cls){
		try {
			Stack<Activity> activityStackTemp = new Stack<Activity>();
			for (Activity activity : activityStack){
				if (activity.getClass().equals(cls)){
					//判断activity是否已经消失,如果未消失,则消失activity,如果栈里面有activity,但是已经消失了,则从栈里面
					//移除该对象,为了防止多页面跳时,部分activity被错误加入.
					if(!activity.isFinishing()){
						activityStackTemp.add(activity);
						activity.finish();
					}
				}
			}
			//在list集合遍历的时候,不能删除list中的元素,否则会报java.util.ConcurrentModificationException异常
			activityStack.removeAll(activityStackTemp);
		// 在这里捕获空,当程序退出,又接收推送,点击推送,这个方法报空
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 功能描述: 结束所有Activity
	 */
	public static void finishAllActivity(){
		//这里可能会报数组越界的错误提前异常捕获
		Stack<Activity> activityStackTemp = new Stack<Activity>();
		activityStackTemp.addAll(activityStack);
		try {
			for (int i = 0, size = activityStackTemp.size(); i < size; i++){
				if (null != activityStackTemp.get(i)){
					if(!activityStackTemp.get(i).isFinishing()){
						activityStackTemp.get(i).finish();
					}
				}
			}
			activityStack.clear();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 功能描述: 退出应用程序
	 * @param context 上下文
	 * @param isBackground 是否开启后台运行
	 */
	public void AppExit(Context context, Boolean isBackground){
		try{
			finishAllActivity();
			ActivityManager activityMgr = (ActivityManager) context
					.getSystemService(Context.ACTIVITY_SERVICE);
			activityMgr.killBackgroundProcesses(context.getPackageName());
//			android.os.Process.killProcess(android.os.Process.myPid());
		} catch (Exception e){
			e.printStackTrace();
		} finally{
			// 注意,如果您有后台程序运行,请不要支持此句子
			if (!isBackground){
//				System.exit(0);    // 程序在下载时开启了下载service,此处不要杀掉任何进程
			}
		}
	}
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:ios后台更新和下载

下一篇:php提取图片的主要颜色