| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
ph44
9年前发布

【Android工具类】Activity管理工具类AppManager

转载请注明出处: http://blog.csdn.net/zhaokaiqiang1992

    import java.util.Stack;                import android.app.Activity;        import android.app.ActivityManager;        import android.content.Context;                /**        *         * @ClassName: com.qust.myutils.AppManager        * @Description: Activity管理类:用于管理Activity和退出程序        * @author zhaokaiqiang        * @date 2014-11-20 下午4:53:33        *         */        public class AppManager {                    // Activity栈            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; i < activityStack.size(); i++) {                    if (null != activityStack.get(i)) {                        activityStack.get(i).finish();                    }                }                activityStack.clear();            }                    /**            * 退出应用程序            */            public void AppExit(Context context) {                try {                    finishAllActivity();                    ActivityManager activityMgr = (ActivityManager) context                            .getSystemService(Context.ACTIVITY_SERVICE);                    activityMgr.killBackgroundProcesses(context.getPackageName());                    System.exit(0);                } catch (Exception e) {                }            }        }  

  这个类是从oschina的android客户端开源项目中抽取出来的,主要用于Activity的管理和应用程序的退出。

    如果我们在退出程序的时候,调用AppManager.AppExit(Context)就可以将栈中所有的Activity实例销毁。

    如果我们要更加方便的是用这个管理类,推荐创建一个Activity的基类,并在onCreate和onDestory方法里面调用对应的方法,这样我们就不需要单独在某个Activity里面添加重复逻辑,精简代码,比如像下面这样

    /**            * 对context进行初始化,并将当前的Activity加入到堆栈中,便于管理            */            @Override            protected void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                // 添加Activity到堆栈                AppManager.getAppManager().addActivity(this);            }                    @Override            protected void onDestroy() {                super.onDestroy();                // 结束Activity&从堆栈中移除                AppManager.getAppManager().finishActivity(this);            }