package com.yunpai.tms.application;

import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context; import com.yunpai.tms.R;
import com.yunpai.tms.activity.LoginActivity;
import com.yunpai.tms.activity.MainActivity; import java.util.Stack; public class AppStackManager {
// Activity栈
private static Stack<Activity> activityStack;
// 单例模式
private static AppStackManager instance; /**
* 单一实例
*/
public static AppStackManager getInstance() {
if (instance == null) {
instance = new AppStackManager();
}
return instance;
} /**
* 添加Activity到堆栈
*/
public void addActivity(Activity activity) {
if (activityStack == null) {
activityStack = new Stack<Activity>();
}
if (!activityStack.contains(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.overridePendingTransition(R.anim.push_right_out, R.anim.push_right_out);
}
} /**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls) {
for (Activity activity : activityStack) {
if (activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
} /**
* 弹出栈顶
*/
public void finishAfterActivity(Class<?> cls) {
for (int i = activityStack.size() - 1; i > 0; i--) {
if (null != activityStack.get(i)) {
if (activityStack.get(i).getClass().equals(cls))
break;
activityStack.get(i).finish();
}
} } /**
* 结束所有Activity
*/
public void finishAllActivity() {
for (int i = 0; i < activityStack.size(); i++) {
if (null != activityStack.get(i)) {
activityStack.get(i).finish();
}
}
activityStack.clear();
// System.exit(0);
} /**
* 重新登录Activity
*/
public void LoginActivity() {
for (int i = 0; i < activityStack.size(); i++) {
if (null != activityStack.get(i) && !activityStack.get(i).getClass().getName().equals(LoginActivity.class.getName())) {
activityStack.get(i).finish();
}
}
} /**
* 到首页
*/
public void goToMainActivity() {
for (int i = 0; i < activityStack.size(); i++) {
if (null != activityStack.get(i) && !activityStack.get(i).getClass().getName().equals(MainActivity.class.getName())) {
activityStack.get(i).finish();
}
} } /**
* 退出应用程序
*/
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) {
}
}
}

使用方法:

@Override
protected void onStart() {
super.onStart();
AppStackManager.getInstance().addActivity(this);//加入栈
}
@Override
protected void onDestroy() { AppStackManager.getInstance().finishActivity(this);
super.onDestroy();
}

Activity管理类的更多相关文章

  1. activity管理类 appManager

    程序启动第一个界面类: net.oschina.app.AppStart功能描述:一张图片代码细节描述:一个透明度的动画效果,效果动画完成后自动启动新的Activity(Main) 基本BaseAct ...

  2. Android Activity管理类

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

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

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 import java.util.Stack; import android.app.Activity; i ...

  4. Android Activity 管理 (AppManager)(非原创)

    AppManager 类: /** * 应用程序Activity管理类:用于Activity管理和应用程序退出 *  */ public class AppManager {     private ...

  5. 我的Android进阶之旅------&gt;Android关于Activity管理的一个简单封装

    怎样管理当前的执行Activity栈,怎样彻底退出程序.本文封装了一个Activity管理类,能够方便随时退出程序. import java.util.Stack; import android.ap ...

  6. DownloadManager 下载管理类

    演示 简介 从Android 2.3开始新增了一个下载管理类,在SDK的文档中我们查找android.app.DownloadManager可以看到.下载管理类可以长期处理多个HTTP下载任务,客户端 ...

  7. Android项目实战(三十七):Activity管理及BaseActivity的实现

    Ps:7-10月 完成公司两个app项目上架.漏掉的总结 开始慢慢补上. 一.写一个Activity的管理类 1.单例模式,以栈(先进后出)的形式存储Activity对象 public class A ...

  8. [置顶] 滴滴插件化框架VirtualAPK原理解析(一)之插件Activity管理

    上周末,滴滴与360都开源了各自的插件化框架,VirtualAPK与RePlugin,作为一个插件化方面的狂热研究者,在周末就迫不及待的下载了Virtualapk框架来进行研究,本篇博客带来的是Vir ...

  9. Android wifi管理类:WifiAdmin

    1.wifi的五种状态: WIFI_STATE_DISABLED   WIFI网卡不可用 WIFI_STATE_DISABLING WIFI网卡正在关闭 WIFI_STATE_ENABLED     ...

随机推荐

  1. Spark 源码阅读——任务提交过程

    当我们在使用spark编写mr作业是,最后都要涉及到调用reduce,foreach或者是count这类action来触发作业的提交,所以,当我们查看这些方法的源码时,发现底层都调用了SparkCon ...

  2. P2344 奶牛抗议

    P2344 奶牛抗议 题目背景 Generic Cow Protests, 2011 Feb 题目描述 约翰家的N 头奶牛正在排队游行抗议.一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为 ...

  3. Android Studio快速的接受一个项目

    1.关键词搜索法,搜索这个词,然后仔细的去找找.肯定可以找到的,虽然可能会有一些奔波. 2.Android device moniter ,可以抓屏幕,看布局,而且可以看到资源id.看到资源id,你说 ...

  4. Pascal 杨辉三角

    用于打印杨辉三角的程序,有多种算法仅提供一种 PRogram yh (input,ouput);var  m,n,c:integer;Begin For m:=0 TO 10 Do   Begin   ...

  5. USACO Section1.2 Dual Palindromes 解题报告

    dualpal解题报告 —— icedream61 博客园(转载请注明出处)-------------------------------------------------------------- ...

  6. 《算法》C++代码 SPFA

    SPFA的全称是Shortest Path Faster Algorithm,一看名称八成就是中国人起的名字,因为外国人起算法名称一般都会写上自己的名字,很少谦虚.实际上,这是西南交通大学段凡丁同学于 ...

  7. leetcode 【Rotate List 】python 实现

    题目: Given a list, rotate the list to the right by k places, where k is non-negative. For example:Giv ...

  8. Opencv2.4.13.6安装包

    这个资源是Opencv2.4.13.6安装包,包括Windows软件包,Android软件包,IOS软件包,还有opencv的源代码:需要的下载吧. 点击下载

  9. [转] Linux命令行编辑常用键

    ctrl + a 将光标移动到命令行开头相当于VIM里shift+^ ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$ ctrl + 方向键左键 光标移动到前一个单词开头 ctr ...

  10. HttpClient实现POST参数提交

    HttpClient client = new HttpClient(); //使用FormUrlEncodedContent做HttpContent var content = new FormUr ...