转自:http://blog.csdn.net/u010635353/article/details/49681659

不了解统一堆栈管理之前的实现方法是在application中添加一个公共方法addActivity,每次Activity创建的时候调用该方法将当前Activity添加到application的Activity list中,当应用程序终止的时候,调用application定义好的exit方法,遍历Activity list,关闭所有Activity。

今天看到一篇文章,比原先的实现方法更好,原文如下:

=================================原文start
在我们App运行时,可能在某个界面需要退出App,如果你没有把之前的Activity都finish掉的话(每次跳转都把前一个Activity finish掉,虽然可以实现,但本人不建议这种写法,因为有的Activity需要反复调用,不能每一次都取create),那么当你点击返回键的时候,并不能实现直接退出,这种时候,就需要我们对Activity做一个统一的管理。
原理是,写一个BaseActivity继承自Activity,然后在Oncreate方法里,把当前的Activity加到我们Activity管理容器里,然后在需要的时候,遍历这个容器,把所有Activity都finish掉。
直接上代码:
Activity管理类:AppManager

/** * 应用程序Activity管理类:用于Activity管理和应用程序退出 * * @author BiHaidong * @version 1.0 * @created 2015-9-21 */
public class AppManager {  private static Stack<Activity> activityStack = new Stack<Activity>();  /** * 添加Activity到堆栈 */  public static void addActivity(Activity activity) {  activityStack.push(activity);  }  /** * 获取当前Activity(堆栈中最后一个压入的) */  public static Activity currentActivity() {  return activityStack.lastElement();  }  /** * 结束当前Activity(堆栈中最后一个压入的) */  public static void finishCurrentActivity() {  Activity activity = activityStack.pop();  activity.finish();  }  /** * 结束指定的Activity */  public static void finishActivity(Activity activity) {  if (activity != null) {  activityStack.remove(activity);  if(!activity.isFinishing()) {  activity.finish();  }  }  }  /** * 结束指定类名的Activity */  public static void finishActivity(Class<?> cls) {  for (Activity activity : activityStack) {  if (activity.getClass().equals(cls)) {  finishActivity(activity);  }  }  }  /** * 结束所有Activity */  public static void finishAllActivity() {  for (Activity activity : activityStack) {  if (activity != null) {  activity.finish();  }  }  activityStack.clear();  }  /** * 退出应用程序 */  public static void AppExit(Context context) {  try {  finishAllActivity();  ActivityManager manager = (ActivityManager) context  .getSystemService(Context.ACTIVITY_SERVICE);  manager.killBackgroundProcesses(context.getPackageName());  System.exit(0);  } catch (Exception e) {  e.printStackTrace();  }  }
}  

BaseActivity:

public class BaseActivity extends Activity {  @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  super.setContentView(R.layout.base_layout);  AppManager.addActivity(this);
}  

这样,我们只要把自己的Activity继承自BaseActivity,就可以了。然后在需要的时候调用AppManager的对应方法。

=======================================原文end

个人觉得BaseActivity 还可以重写Activity的生命周期的一些方法,已达到代码复用。另外,在公司看到其他人用过类似代码,不过在manager中,对Activity的每个操作都进行了判断,判断是否是BaseActivity的instance,个人感觉此种方法更严谨一些,不知各位觉得如何。如有疑问,欢迎指出。

Android:Activity统一堆栈管理(实现随时finish特定或是所有Activty)相关推荐

  1. 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )

    文章目录 一. 安卓应用任务栈管理 二. 任务与返回堆栈回顾 三. 返回堆栈清除 四. 关于亲和性回顾 五. Activity 启动模式 LaunchMode 补充 ( standard | sing ...

  2. Android Activity生命周期管理

    http://blog.csdn.net/thl789/article/details/6628463 本文描述Android中Activity的状态,Activity的状态转换,从而总结了Activ ...

  3. 【Android 应用开发】Activity 返回堆栈管理 ( 栈内复用模式 singleTask | 单实例模式 singleInstance )

    文章目录 一. singleTask ( 栈内复用模式 ) Activity 实例在返回堆栈中的位置 二. singleTask ( 栈内复用模式 ) Activity 启动的五种情况 三. sing ...

  4. Android Studio统一依赖管理Composing builds

    glideVersion : "4.11.0", okhttpVersion : "3.11.0", retrofitVersion : "2.3.0 ...

  5. Android Studio统一依赖管理Composing builds,2021最新网易Android面经

    支持Android Studio的代码补全,以下演示示例图来自于网络 使用方式可参考:Kotlin + buildSrc for Better Gradle Dependency Management ...

  6. android 生命周期管理,Android Activity生命周期和堆栈管理的详解_Android_脚本之家...

    Activity的生命周期 Activity是Android中的四大组件之一,也是最基本,最重要的组件,是android系统提供一个可视化的,能与用户交换的组件. 系统提供的组件,不需要用户实例化,用 ...

  7. Android Studio使用Composing builds统一依赖管理

    Composing builds 一.啥是 Composing builds ?? https://docs.gradle.org/current/userguide/composite_builds ...

  8. Android Activity跳转动画 - overridePendingTransition用法及原理分析

    overridePendingTransition()是在Activity类中实现的一个用来实现跳转动画的方式,也是最常使用的方法. overridePendingTransition() 先看这个名 ...

  9. Android关掉多个activity,Android应用开发之Android Activity栈管理 制定关闭某一个Activity,关闭所有Activit...

    本文将带你了解Android应用开发之Android Activity栈管理  制定关闭某一个Activity,关闭所有Activit,希望本文对大家学Android有所帮助. 系统Api :打开新的 ...

最新文章

  1. 读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势
  2. 【软件】我安装Tomcat5.5(Java Web开发服务器)的几点经验
  3. android tab 点击,TabLayout.Tab点击事件
  4. 数据结构之栈的应用:表达式求值
  5. eclipse tomcat lomboz的安装配置说明
  6. python实现搜索引擎——构建爬虫系统(二)
  7. java常用工具下载
  8. 使用Servlet来连接数据库并在前端展示
  9. 网络空间安全 渗透 攻防5(文件共享服务器)
  10. 未来IT互联网企业的发展前景
  11. Linux系统进程优先级——计算方式
  12. bug-猎豹wifi提示无线网卡未打开(微星笔记本)
  13. PADS VX2.8 基本规则的设置方法
  14. android 推送历史 coolapk,酷安(com.coolapk.market) - 11.2.2 - 应用 - 酷安
  15. 华为ENSP网络设备配置实战2(较为复杂的ospf)
  16. Mysql.ACID
  17. 用Python画大学物理实验曲线
  18. C语言课程设计服装店,《C语言程序设计》课程设计实验报告-服装网店信息管理系统.doc...
  19. R-教材P110 条形图
  20. 【设计模式】UML建模之包图、组件图和部署图学习笔记

热门文章

  1. nacos 下线接口_《掌门教育微服务体系 Solar | 阿里巴巴 Nacos 企业级落地中篇》...
  2. orcad如何设置模块化设计_这个模块化的办公桌让您设计每一个元素,以创造完美的工作设置...
  3. 组件的生命周期钩子函数
  4. 潭州课堂25班:Ph201805201 并发(非阻塞,epoll) 第十课 (课堂笔记)
  5. 配置管理-CMMI的五个等级
  6. properties文件 , properties类, 的作用
  7. mongodb-java-driver基本用法
  8. {Azure} 常用链接
  9. Git:错误:error:src refspec master does not match any
  10. 解决mysql中表字符集gbk,列字符集Latin1,python查询乱码问题