Android程序有很多Activity,比如说主窗口A,调用了子窗口B,在B中如何关闭整个Android应用程序呢?

首先要说明在B中直接使用finish(),接下来手机显示的还是主窗口A,所以一起来看看Android开发网是如何实现的吧.

1. Dalvik VM的本地方法

android.os.Process.killProcess(android.os.Process.myPid())    //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。
  System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出

2. 任务管理器方法

首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限android.permission.RESTART_PACKAGES,我们直接结束自己的package即可,直接使用ActivityManager类的restartPackage方法即可,参数为package name,该类通过getSystemService(Context.ACTIVITY_SERVICE)来实例化ActivityManager对象,这种方法系统提供的,但需要显示声明权限,所以使用中需要综合考虑。

3. 根据Activity的声明周期

我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志Intent.FLAG_ACTIVITY_CLEAR_TOP,这样开启B时将会清除该进程空间的所有Activity。

在A窗口中使用下面的代码调用B窗口

Intent intent = new Intent();
intent.setClass(Android123.this, CWJ.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  //注意本行的FLAG设置
startActivity(intent);

接下来在B窗口中需要退出时直接使用finish方法即可全部退出。


如果把A做为程序启动页面的话在A里写一个onStart()方法。

protected void onStart() {
  super.onStart();
  Intent intent = getIntent();
  int x = intent.getIntExtra("flag");
  if (x == 0)
   finish();
 }

然后在B,C,D的关闭方法块儿上加入以下方法。

Intent intent = new Intent();
intent.setClass((B或者C或者D).this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("flag", 1);
startActivity(intent);

在这里intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);这条语句是关键

这样的话当执行关闭的代码块儿的时候会启动A这个activity,然后执行onStart()方法,启动onStart()方法以后效果就跟大家期待的那样完全退出程序。

这样的话在既保留了返回按钮的功能又可以退出整个应用程序。

转载于:https://www.cnblogs.com/xilin/archive/2012/07/31/2617413.html

关闭多个activity相关推荐

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

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

  2. Android点击这个关闭那个,Android关闭指定的Activity或多个Activity

    接触过Android的应该都知道关闭一个Activity直接调用finish()就好啦!但项目中偶尔会遇到在某个Activity中关闭另一个Activity的需求.举个栗子,比如开发某个APP,用户从 ...

  3. Android Activity栈管理 制定关闭某一个Activity,关闭所有Activity

    系统Api :打开新的Activity 关闭之前所有Activity Intent intent = new Intent(this, LoginActivity.class); intent.set ...

  4. 安卓学习之--如何关闭所有的activity

    根据Activity的声明周期  方法1    我们知道Android的窗口类提供了历史栈,我们可以通过stack的原理来巧妙的实现,这里我们在A窗口打开B窗口时在Intent中直接加入标志 Inte ...

  5. Android之退出应用关闭项目每个Activity的总结

    思路 我们先封装好一个类叫MyApplication这个类,把这个类设置为单例模式,只有一个对象,然后在这个类里面写一个能装Activity的集合,相当于一个栈,然后每次有activity的时候,就去 ...

  6. android 为什么不调用onDestroy方法关闭activity

    前天有个同学突然咨询我,说关闭android的activity,为什么不直接调用ondestroy方法,而是要调用activity.finish(). 我这里总结下我的理解: 1.我们知道onDest ...

  7. Activity的知识

       什么是 Activity? 通俗一点说 Activity 就是一个界面,这个界面里面可以放置各种控件.Activity 的界面也是 用 xml 文件表示的,放置在 res->layout ...

  8. activity生命周期及数据保存

    为什么80%的码农都做不了架构师?>>>    public class ActivityLife extends Activity {// 在Activity生命周期开始时被调用@ ...

  9. day4 Activity相关

    什么是Activity? 与用户交互的接口,提供用户触摸,点击,滑动的界面.Android中的activity全都归属于task管理 .task 是多个 activity 的集合,这些 activit ...

最新文章

  1. android 百度导航滑动会异常,百度导航Android版问题集
  2. Tomcat关闭日志catalina.out
  3. 架构师之路 — 软件架构 — 应用架构设计模式
  4. [java多线程] - 锁机制同步代码块信号量
  5. MySQL SELECT..INTO OUTFILE语句只能导出1000行的故障
  6. 82%开源软件兼容Windows
  7. 微软公司服务器主题软件,微软重大IT升级 七款产品巩固软件帝国
  8. 等比数列三角形 (数论 + 黄金分割点)+ JOISC 2016 Day3 T3 「电报」(基环树 + 拓扑排序)
  9. LeetCode 1813. 句子相似性 III
  10. gcn语义分割_另辟蹊径,中科院自动化所等首次用图卷积网络解决语义分割难题...
  11. npm i 命令长时间卡住的解决办法
  12. ajax请求传递参数的方式,Ajax请求 一般处理程序参数传递的几种方式
  13. rsa算法的java实现,RSA算法的实现——java版
  14. 服务器 虚拟机 崩溃,认识VMware虚拟机,系统崩溃或异常,可通过快照还原磁盘文件系统...
  15. Kubernetes—Pod
  16. JAVA学习导图、思维导图
  17. 解决git bash中无法粘贴的问题
  18. WooCommerce REST API的初学者指南
  19. catia钣金根据线段折弯_CATIA钣金模块进阶教程.ppt
  20. python解析html用哪个模块_[转载]python模块学习---HTMLParser(解析HTML文档元素)

热门文章

  1. 基于HT for Web的Web SCADA工控移动应用
  2. Puppet基础篇7-编写第一个完整测试模块puppet
  3. SilverLight 条码 扫描枪 MVVM(转载)
  4. 公司正式与腾讯RTX告别
  5. sql 整改措施 注入_防止SQL注入的五种方法
  6. ERP项目实施记录05
  7. Windows7下无法安装Oracle11.1.0问题
  8. string字符串的查找替换、模式匹配
  9. 企业微信jssdk分享接口管理系统
  10. 使用dotenv管理环境变量