转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6307239.html

public class AppManager {
  private static Stack<Activity> mStack;
  private static AppManager instance;

  private AppManager(){}
  public static AppManager getInstance(){
    if(instance!=null){
      instance=new AppManager();
    }
    return instance;
  }

  /**
  * 添加Activi到堆栈
  * @param activity
  */
  public void addActivity(Activity activity){
    if(mStack!=null){
      mStack=new Stack<Activity>();
    }
    mStack.add(activity);
  }

  /**
  * 获取当前Activity(堆栈中最后压入的一个)
  * @return
  */
  public Activity currentActivity(){
    return mStack.lastElement();
  }

  public boolean isLastActivity(Class cls){
    if(mStack==null||mStack.size()==0){
      return false;
    }
    return mStack.get(mStack.size()-1).getClass().equals(cls);
  }

  /**
  * 结束当前Activity(堆栈中最后压入的一个)
  */
  public void finishCurrentActivity(){
    finishActivity(mStack.lastElement());
  }

  /**
  * 结束指定Acitivity
  * @param activity
  */
  public void finishActivity(Activity activity){
    if(activity!=null){
      mStack.remove(activity);
      activity.finish();
      activity=null;
    }
  }

  /**
  * 结束指定类名的Activity
  * @param cls
  */
  public synchronized void finishActivity(Class<?> cls){
    if (mStack==null||mStack.size()==0){
    return;
    }
    for (Activity activity:mStack) {
      if (activity.getClass().equals(cls)){
        finishActivity(activity);
      }
    }
  }

  /**
  * 结束所有Activity
  */
  public void finishAllActivity(){
    for (int i=0,size=mStack.size();i<size;i++){
      if(null!=mStack.get(i)){
        mStack.get(i).finish();
      }
    }
    mStack.clear();
  }

  /**
  * 退出应用程序
  * @param context
  */
  public void AppExit(Context context){
    finishAllActivity();
    System.exit(0);
  }
}

Android 自定义Activity栈对Activity统一管理的更多相关文章

  1. Android Studio 中 Gradle 依赖的统一管理(rootProjectt)

    最近遇到Android Studio 中 Gradle 依赖的统一管理的不懂得地方,看大神的也没看懂,百度了一下,使用起来还挺方便 下面是链接,在这里我就不详细说明了, http://www.jian ...

  2. ActivityManagerService数据结构Activity栈管理(二)

    ActivityManagerService要管理四大组件,那四大组件就必须在AMS中有存在的形式,这里先从AMS 如何管理Activity 谈起: Activity在AMS 中存在的形式为Activ ...

  3. activity栈管理的3种方式

    一.背景 在android开发过程最经常使用的组件非activity莫属. 通过分析activity的各种跳转,执行同学能够分析用户的各种行为.更重要的一点是在做插件化的过程中,我们经常会对activ ...

  4. Android 一次退出所有activity的方法

    转自:http://bbs.51cto.com/thread-970933-1.html 因为android的API中没有提供一次性退出的接口所以想要在多activity的程序里面一次性退出的话就要费 ...

  5. android的activity栈管理

    在进行BlackBerry程序开发的时候,BlackBerry提供了一个管理Screen的栈,用来从任何地方来关闭位于最上一层的Screen,使用UiApplication.getUiApplicat ...

  6. Android解析ActivityManagerService(二)ActivityTask和Activity栈管理

    前言 关于AMS,原计划是只写一篇文章来介绍,但是AMS功能繁多,一篇文章的篇幅远远不够.这一篇我们接着来学习与AMS相关的ActivityTask和Activity栈管理. 1.ActivitySt ...

  7. 朝花夕拾-android 自定义application 管理activity的生命周期

    为了安全退出多个已创建的activity? 可以自定义application:myapplication. 增加一个list成员保存,一些关键的已创建的activity实例: private List ...

  8. Android开发 ---SQLite数据库,lock文件,结果集游标,适配器,安全退出,给连接设置下划线,编辑器,投影,ContentValues存储,DbHelper,activity栈

    目录截图: 1.activity_main.xml 主界面效果: <?xml version="1.0" encoding="utf-8"?> &l ...

  9. 【Android】11.1 Activity的生命周期和管理

    分类:C#.Android.VS2015: 创建日期:2016-02-21 一.基本概念 1.必须理解这些方法,否则你编的程序根本就没法在实际项目中使用 当然,如果仅仅是为了玩玩,或者仅仅是作为例子为 ...

随机推荐

  1. phpstrom 快捷键

    常用的PHPStorm快捷键:ctrl+j 插入活动代码提示ctrl+alt+t 当前位置插入环绕代码alt+insert 生成代码菜单ctrl+q 查看代码注释ctrl+d 复制当前行ctrl+y ...

  2. [Big Data]Spark

    SPARK Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapRed ...

  3. CodeForces 617D Polyline

    无脑暴力判断. #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...

  4. IO之同步、异步、阻塞、非阻塞 (2)

    [原创链接: http://www.smithfox.com/?e=191, 转载请保留此声明, 谢谢! ] I/O Model 是一个很大的话题, 也是一个实践性很强的事情, 网上有各种说法和资料, ...

  5. ICE第四篇-----python版本

    ice文件: module Modipplace {     interface  Ipplace{          string iptoplace(string s);      };   }; ...

  6. ID3决策树预测的java实现

    刚才写了ID3决策树的建立,这个是通过决策树来进行预测.这里主要用到的就是XML的遍历解析,比较简单. 关于xml的解析,参考了: http://blog.csdn.net/soszou/articl ...

  7. 使用LIBUSB实现和自定义通讯设备通讯--MFC代码在末尾

    LIBUSB是一款简单好用的USB通讯开发库,一般HID设备用该库通讯能大大降低开发周期,使用如下,首先需要为设备安装驱动 在libusb的bin目录下有一个inf_wirzed.exe的文件,该文件 ...

  8. iOS Socket第三方开源类库 ----AsyncSocket

    假如你也是一个java程序员,而你又不是很懂Socket. 下面我的这篇文章也许能帮助你一些. http://xiva.iteye.com/blog/993336 首先我们写好上面文章中的server ...

  9. VR元年,VR虚拟现实这只风口上的猪有怎样的变化?

    走过了2016年,无论我们承认不承认,这一年到底是不是VR元年,我们都很难否定,在这一年,VR虚拟现实生态圈有很大的变化,那么,这一年VR虚拟现实到底有怎样的改变呢?我们的VR虚拟现实生态圈,发生了什 ...

  10. Unity3D ——强大的跨平台3D游戏开发工具(四)

    第六章 Unity3D中的C#Script编程的注意事项 也许您在学习Unity3D之前,已经是一位C#的编程高手了.但在Unity3D中的C#并不像真正的C#那般强大,在Unity3D的C#中必须全 ...