自定义AppManager管理所有的activity

        我们在项目中会经常遇到需要退出程序,关闭某一个Activity的需求,如果不事先定义好,退出activity将会很麻烦,相信你们在网上也寻找到过很多退出activity的方法,大多都不能很好的退出我们的activity。今天我为大家介绍一下如何定义一个AppManager,来达到退出我们的activity。

     首先呢,我先介绍一个java类,java.util.Stack任务栈。我们在程序中会用到,Static遵循后进先出的原则压站,也就是栈顶的先出。Stack 类表示后进先出(LIFO)的对象堆栈。它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。API文档及示意图如下所示。

 自定义AppManager管理所有的activity_第1张图片

自定义AppManager管理所有的activity_第2张图片

  好了,这个理解了之后,下面就是我们定义的管理类了,代码如下所示。

   

package com.meijianfang.tool;


import java.util.Stack;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
/**
 **************************************** 
 * @author 
 * @Description: 这是一个管理Activity的类,可以对项目中Activity的生命周期进行管理,
 * 							达到安全退出的目的;
 * @date 2016-3-7 下午3:30:52
 ***************************************** 
 */
public class AppManager {
	
	private static Stack<Activity> activityStack;
	private static AppManager instance;
	
	private AppManager(){}
	/**
	 * 单一实例
	 */
	public static AppManager getAppManager(){
		if(instance==null){
			instance=new AppManager();
		}
		return instance;
	}
	/**
	 * 添加Activity到堆栈中
	 */
	public void addActivity(Activity activity){
		if(activityStack==null){
			activityStack=new Stack<Activity>();
		}
		activityStack.add(activity);
	}
	/**
	 * 获取当前Activity(堆栈中最后压入的)
	 */
	public Activity currentActivity(){
		Activity activity=activityStack.lastElement();
		return activity;
	}
	/**
	 * 结束当前Activity(堆栈中最后压入的)
	 */
	public void finishActivity(){
		Activity activity=activityStack.lastElement();
		finishActivity(activity);
	}
	/**
	 * 结束指定的Activity
	 */
	public void finishActivity(Activity activity){
		if(activity!=null){
			activityStack.remove(activity);
			activity.finish();
			activity=null;
		}
	}
	/**
	 * 结束指定类名的Activity
	 */
	public void finishActivity(Class<?> cls){
		for (Activity activity : activityStack) {
			if(activity.getClass().equals(cls) ){
				finishActivity(activity);
			}
		}
	}
	/**
	 * 结束所有Activity
	 */
	public void finishAllActivity(){
		for (int i = 0, size = activityStack.size(); i < size; i++){
            if (null != activityStack.get(i)){
            	activityStack.get(i).finish();
            }
	    }
		activityStack.clear();
	}
	/**
	 * 彻底退出应用程序,安全退出
	 *
	 */
	public void AppExit(Context context) {
		try {
			finishAllActivity();
			/**这种方法会终止一切和这个程序包关联的,所有共享同一uid的process被kill,所有的activity会被removed
			所有创建的服务会停止,还会发一个广播 Intent.ACTION_PACKAGE_RESTARTED 导致所有注册alarms被stopped, notifications 被removed。
			但是在Android 2.2中新增了一个API可以帮助我们杀死后台进程(Android2.3再次强调其调用的API Level最小为8)killBackgroundProcesses是android.app.ActivityManager类的方法,
			使用时必须在androidmanifest.xml文件中加入KILL_BACKGROUND_PROCESSES这个权限。虽然本类还提供了restartPackage (String packageName) 方法调用的API Level为3,但是SDK中已经标记为deprecated,
			其实他们的原理都是一样的*/
			ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
			//activityMgr.restartPackage(context.getPackageName());
			activityMgr.killBackgroundProcesses("com.meijianfang");
			//终止虚拟机
			System.exit(0);
			//杀死进程
			android.os.Process.killProcess(android.os.Process.myPid());
		} catch (Exception e) {	}
	}
}
  最后在我们的Activity中来使用我们定义的类。在我们的onCreate方法中使用       AppManager.getAppManager().addActivity()方法将我们的activity压入栈内。

  

你可能感兴趣的:(android,AppManager,android杀死进程,android退出应用)