【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);
	}
时间: 2024-08-09 06:08:41

【Android工具类】Activity管理工具类AppManager的相关文章

【转载】 Android源代码仓库及其管理工具Repo分析

软件工程由于需要不断迭代开发,因此要对源代码进行版本管理.Android源代码工程(AOSP)也不例外,它采用Git来进行版本管理. AOSP作为一个大型开放源代码工程,由许许多多子项目组成,因此不能简单地用Git进行管理,它在Git的基础上建立了一套自己的代码仓库,并且使用工 具Repo进行管理.工欲善其事,必先利其器.本文就对AOSP代码仓库及其管理工具repo进行分析,以便提高我们日常开发效率. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 现代的

Linux服务器管理工具之进程管理工具top、htop、glances、dstat详解

在企业生产环境中,系统管理员通常要不定时的检查服务器上各资源的使用状况,如CPU使用率,负载,磁盘的读写速率,网络传输状况等等.因此,掌握一个进程管理工具的熟练使用,无疑对管理员的工作有事半功倍的效果.本文借助CentOS6.6向读者尽可能详细讲解top.htop.glances.以及dstat工具的使用方法和技巧.    A.top工具 top是CentOS系统自带的一款动态显示系统资源使用状况的进程管理工具,类似于windows下的任务管理器,其支持交互式命令以及定制显示内容.在命令行键入t

python 工具链 包管理工具 pip

Installation mac下可以采用 brew,easy_install(python自带)等方式安装. centos下可以采用yum,easy_install等方式安装. 但是上面两种方式在系统上有 多个 python 环境时,会造成混乱.不太好给制定的 python 版本安装 pip,于是采用下面的方式,在安装时就指定了python版本. 推荐安装方式 # 默认安装脚本,下载速度较慢 curl https://bootstrap.pypa.io/get-pip.py | /usr/bi

【Android先进】我们为什么要创建Activity基类Activity什么是一般的基类方法

今天,它可以被视为只是基本完成了其首个商业项目,在发展过程中,风格,然而随着工作经验的积累.最终開始慢慢的了解到抽象思想在面向对象编程中的重要性,这一篇简单的介绍一下我的一点收获. 首先,在如今的项目中使用的主要是afinal框架,并且这个框架确实比較不错,省去了不少工作量.在编写Activity的过程中,基本都是直接继承自FinalActivity类,这样能够使用这个类给我们封装好的不少的方法,可是随着项目慢慢推进,这样的直接继承框架类的一些缺点也開始慢慢的显现出来.最基本的就是扩展性受到了一

‘【译】android的审计和hacking工具

原文:Best Android Tools For Security Audit and Hacking          (不开心,找点事情做<<<) android系统占移动市场份额的80%且有恶意软件,这是一个问题.Hacker会对手机恶意操作,不只是发送扣费短信.在本文,将会介绍对各式各样的app进行渗透测试和攻击(包含网络测试.网络攻击.嗅探等). Hackode:使用教程 Hackode是一个app.它是黑客的工具箱,可以为渗透测试者.白帽子.IT管理员和计算机安全从业者提供

IOS SVN源代码管理工具使用

01.    源代码管理工具概述(PPT)===================================================* 源代码管理工具的作用:# 能追踪一个项目从诞生一直到定案的过程# 记录一个项目的所有内容变化# 方便地查阅特定版本的修订情况 * 如果是团队开发,使用源代码管理工具是强制性的!* 如果是单人开发,也强烈建议现在就开始使用源代码管理工具 * 使用源代码管理工具# 由于使用简单,不会增加工作量# 不会对现有工作造成任何损害(坏的影响)# 是一位合格的软件

源代码管理工具简介

#一. 源代码管理工具简介* 有必要给大家的介绍一下,如果不说的话,大家都不知道它是干嘛的,首先我们要逐渐的建立器一个感受,对源代码管理工具的一个感觉. * 为什么会出现源代码管理工具? * 首先它得有一定的功能,对不对?任何的发明创造,都是为了解决人类的问题的,对不对?甚至一些语法规则的发明也是为了解决一定的问题的,对不对? * 我随便举个例子啊,举个简单的例子同学们理解一下,比如说像以前我们为了存储一个整形数据,是不是发明了一个叫int 类型的.后来发现不太靠谱,因为他只能存一个整数,所以就

IOS开发-关于代码管理工具之SVN

最近在做的一个项目,就用到了代码管理工具,那么就对SCN进行了一个简单的了解,即原理和一些常用命令. 那么我们为什么需要使用SVN呢,我们可以吧SVN当成是一个备份服务器,他可以帮你记住每次上传到这个服务器的档案内容,并且自动的赋予每次变更的一个版本. 因为如果是团队开发的话,版本管控是非常重要,你无法保证你手头上的版本永远都是对的,对于团队开发来说,数据同步非常重要,因为互相都需要各自的数据,所以SVN可以帮你解决这个问题. 1.概述 SVN 是集中式源代码管理工具 概念:1> Reposit

Linux包管理工具(rpm/dpkg,yum/apt,alien)

概括: rpm/yum  redhat dpkg/apt  debian alien 转换 在 GNU/Linux( 以下简称 Linux) 操作系统中,RPM 和 DPKG 为最常见的两类软件包管理工具,他们分别应用于基于 RPM 软件包的 Linux 发行版本和 DEB 软件包的 Linux 发行版本.软件包管理工具的作用是提供在操作系统中安装,升级,卸载需要的软件的方法,并提供对系统中所有软件状态信息的查询.RPM 全称为 Redhat Package Manager,最早由 Red Ha