android中完全退出当前应用程序的四种方法

2023-11-01

Android程序有很多Activity,比如说主窗口A,调用了子窗口B,如果在B中直接finish(), 接下里显示的是A。在B中如何关闭整个Android应用程序呢?本人总结了几种比较简单的实现方法。

 

1. Dalvik VM的本地方法

  android.os.Process.killProcess(android.os.Process.myPid())    //获取PID 
  System.exit(0);   //常规java、c#的标准退出法,返回值为0代表正常退出

 

2. 任务管理器方法

   首先要说明该方法运行在Android 1.5 API Level为3以上才可以,同时需要权限

  ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
  am.restartPackage(getPackageName());
  系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上
  <uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-permission>

3. 根据Activity的声明周期

 

3.  我们知道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方法即可全部退出。

 

4.自定义一个Actiivty 栈,道理同上,不过利用一个单例模式的Activity栈来管理所有Activity。并提供退出所有Activity的方法。代码如下:

   public class ScreenManager {
 private static Stack<Activity> activityStack;
 private static ScreenManager instance;
 private  ScreenManager(){
 }
 public static ScreenManager getScreenManager(){
  if(instance==null){
   instance=new ScreenManager();
  }
  return instance;
 }
//退出栈顶Activity
 public void popActivity(Activity activity){
  if(activity!=null){
   activity.finish();
   activityStack.remove(activity);
   activity=null;
  }
 }

//获得当前栈顶Activity
 public Activity currentActivity(){
  Activity activity=activityStack.lastElement();
  return activity;
 }

//将当前Activity推入栈中
 public void pushActivity(Activity activity){
  if(activityStack==null){
   activityStack=new Stack<Activity>();
  }
  activityStack.add(activity);
 }
 //退出栈中所有Activity
 public void popAllActivityExceptOne(Class cls){
  while(true){
   Activity activity=currentActivity();
   if(activity==null){
    break;
   }
   if(activity.getClass().equals(cls) ){
    break;
   }
   popActivity(activity);
  }
 }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android中完全退出当前应用程序的四种方法 的相关文章

随机推荐

  • 正大国际琪貨:做股指期货需要多少保证金?

    股指之前是大户才有机会做 因为需要的条件太高了 一般人玩不来 为什么 看看国内的股指条件 股指的保证金比例是12 14 一手股指保证金大约18万元 啥 这是什么概念 怎么这么贵 哈哈 是不是已经把很多人吓跑了 但这东西 波动的一个点值也很大
  • LSTM简单例子(MATLAB code)

    最近在学习RNN和LSTM 1 http magicly me 2017 03 09 iamtrask anyone can code lstm 2 https zybuluo com hanbingtao note 581764 3 ht
  • GLTF中的Draco编译与测试

    1 GLTF Primitive primitive里面有什么属性 Draco压缩是跟GLTF Primitive primitive息息相关的 下面是 GLTF Primitive 中常见的属性 1 GLTF Accessor indic
  • 12C++11多线程编程之原子操作std::atomic

    1 原子操作std atomic相关概念 前言 原子操作 更小的代码片段 并且该片段必定是连续执行的 不可分割 1 1 原子操作std atomic与互斥量的区别 1 互斥量 类模板 保护一段共享代码段 可以是一段代码 也可以是一个变量 2
  • Docker镜像打包及解压(内外网)

    背景 在企业中往往出现了内网不能和外网相通 不能使用docker pull命令来拉取镜像 这个时候我们就可以考虑在有所需镜像的服务器上导出镜像 再将其上传到内网服务器上 有两种方法 一种是通过容器 一种是通过镜像 其实本质是一样的 容器的实
  • Tomcat配置出错:Using CATALINA_OPTS: ““&&Tomcat启动闪退问题解决

    文章目录 前言 一 问题描述 二 定位问题 1 CMD命令启动 2 解决方法 前言 本篇问题所处环境 Tomcat 9 Java11 Win 10 一 问题描述 在安装配置Tomcat过程中 通过startup bat脚本命令启动Tomca
  • javascript 清除字符串空格

    去除字符串前后的空格 function trim str return str replace s s g 去除字符串中所有空格 function removeAllSpace str return str replace s g 用法举例
  • 服务器散列值与文件,服务器计算的散列值和客户端安全

    服务器计算的散列值和客户端安全 内容精选 换一换 执行adc命令 系统内部通过ADC与运行环境上的ADA的交互 实现文件传输 设置日志级别 心跳检测等功能 在ADC与ADA交互时 涉及使用密钥证书实现ADA 作为服务端 和ADC 作为客户端
  • Mysql 显示替换 if or

    摘要 使用Mysql的进行sql查询过程中 经常会遇到对查询结果做一些显示的替换 方式一 select if value in 0 1 2 NO YES from table name 方式二 select if value 0 or va
  • spring事务的7种传播行为——详细介绍

    目录 事务传播行为 1 PROPAGATION REQUIRED 2 PROPAGATION SUPPORTS 3 PROPAGATION MANDATORY 4 PROPAGATION MANDATORY 5 PROPAGATION NO
  • js开发技巧-实用型

    目录 1 按位或 2 按位与 3 按位取反 4 按位异或 5 6 toString 7 gt 和 lt 8 Number EPSILON
  • 【SpringBoot学习】SpringBoot的自动配置

    SpringBoot自动配置 SpringBootApplication是一个复合注解 其中主要包含以下注解 SpringBootConfiguration 基本是属于替代品 Configuration EnableAutoConfigur
  • ROS 執行launch報錯 python2.7錯誤

    mjm mjm pc Desktop ros robot pro roslaunch ros urdf PK test launch Traceback most recent call last File opt ros melodic
  • Java输出PPT文件(二) - 占位符数据替换

    Java输出PPT文件 二 占位符数据替换 文章目录 Java输出PPT文件 二 占位符数据替换 0 前言 1 依赖 2 代码 3 测试 3 1 模板准备 3 2 替换结果 4 一点分析 4 1 parseParagraph 4 2 get
  • linux下svn命令大全

    1 将文件checkout到本地目录 svn checkout path path是服务器上的目录 例如 svn checkout svn 192 168 1 1 pro domain 简写 svn co 2 往版本库中添加新的文件 svn
  • 淤地坝安全自动监测预警系统解决方案

    一 方案背景 淤地坝是在水土流失地区各级沟道中 以拦泥淤地为目的而修建的坝工建筑物 其主要作用为 滞洪 拦泥 淤地 蓄水 减轻黄河泥沙 保持水土不流失 建设农田 发展农业生产等 我国黄土高原地区现有淤地坝58776座 存在量多面广 建设标准
  • PowerShell脚本文件无法加载运行

    显示Restricted 不允许执行任何脚本 Get ExecutionPolicy RemoteSigned 可执行任何脚本 需要管理员权限 才能设置成功 Set ExecutionPolicy RemoteSigned
  • Centos 7 配置IP地址时network 和networkmanager冲突

    一 区别 1 network service的制御网络接口配置信息改动后 网络服务必须从新启动 来激活网络新配置的使得配置生效 这部分操作和从新启动系统时时一样的作用 制御 控制 是 etc init d network这个文件 可以用这个
  • 2.4.1 用NPOI操作EXCEL--画线

    之所有说NPOI强大 是因为常用的Excel操作她都可以通过编程的方式完成 这节开始 我们开始学习NPOI的画图功能 先从最简单的开始 画一条直线 对应的代码为 HSSFSheet sheet1 hssfworkbook CreateShe
  • android中完全退出当前应用程序的四种方法

    Android程序有很多Activity 比如说主窗口A 调用了子窗口B 如果在B中直接finish 接下里显示的是A 在B中如何关闭整个Android应用程序呢 本人总结了几种比较简单的实现方法 1 Dalvik VM的本地方法 andr