【Android工具类】Activity管理工具类AppManager「建议收藏」

【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的androidclient开源项目中抽取出来的,主要用于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);
	}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116577.html原文链接:https://javaforall.net

(2)
上一篇 2022年1月19日 下午2:00
下一篇 2022年1月19日 下午2:00


相关推荐

  • linux ntp校时 日志,Linux NTP校时

    linux ntp校时 日志,Linux NTP校时1 安装客户端 root 权限运行 apt getinstallnt 修改配置文件 etc default ntpdate NTPSERVERS ntp fudan edu cn 完成以上操作 即可在下次开机时 自动校时如果不想等到下次开机 则直接用 root 用户 直接运行 ntpdatentp fudan edu cn 即可校时成功

    2026年3月20日
    2
  • 什么是SOA架构?

    什么是SOA架构?一.SOA的概念1.1.SOA(Service-OrientedArchitecture)面向服务的架构:Gartnet把它定义为一种软件的设计方法 百度百科把它定义为一个组件模型 W3C把它定义为一种应用程序架构(https://www.w3school.com.cn/w3c/w3c_china.asp) 专家Davis说它是一种设计思想 总之,SOA不是具体的技术实现SOA的实现SOA实现层面包含两个最重要的概念:面向服务的通信(SOCService-Oriented…

    2022年6月16日
    35
  • 系统首选dns服务器修改,Windows系统首选DNS如何设置

    系统首选dns服务器修改,Windows系统首选DNS如何设置Windows系统首选DNS如何设置的呢,有时候可能需要修改或者调整DNS服务器地址的设置,以达到优化网络连接速度的效果。该怎么办?下面是学习啦小编收集整理的Windows系统首选DNS如何设置,希望对大家有帮助~~Windows系统首选DNS的设置方法一:在图形界面下设置DNS服务器址1这里Windows8为例,首先在屏幕的右下角找到“网络连接”图标,如图所示2在“网络连接”…

    2022年5月4日
    98
  • Docker(五)[通俗易懂]

    Docker(五)[通俗易懂]DockerDocker网络–link自定义网络网络连通Docker网络Docker是如何进行网络通讯的?查看本机的网卡和ip地址docker0类似与路由器ip地址一样(x.x.x.1)Dockerdocker run -d -P –name=tomcat03 tomcat:8.0查看容器ip地址docker exec -it a72d4ae634da ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noque

    2022年8月11日
    14
  • linux1521端口不通,Linux开放1521端口允许网络连接Oracle Listene「建议收藏」

    linux1521端口不通,Linux开放1521端口允许网络连接Oracle Listene「建议收藏」症状:1.TCP/IP连接是通的。可以用ping命令测试。2.服务器上OracleListener已经启动。lsnrctlstatus查看listener状态lsnrctlstart启动Oraclelistener3.客户端得到的错误信息通常是:ORA-12170:TNS:连接超时这时,我们基本可以肯定是服务器没有开放1521端口(假设你用默认设置)解决方法:1.假…

    2022年5月1日
    245
  • asf挂卡配置文件_win10系统开挂蓝屏

    asf挂卡配置文件_win10系统开挂蓝屏前文最近发现之前在淘宝入手的慈善包游戏很多游戏时长还是零,当代青年怎么能容忍这种情况!浪费可耻,两毛一张的卡片不香吗,所以就打算挂卡了。简单教程适合新手入门正文01、老规矩咱还是到最大的同性交友网站下载资源,咱直接下载个最新版4.2.0.11-1、github下载(选择win10版本)https://github.com/JustArchiNET/ArchiSteamFarm/releases1-2、百度网盘下载也可以对于在github下载慢的同学给个网盘链接https://link.z

    2025年6月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号