当前位置: 首页 > news >正文

Android 完美退出 App (Exit)

最近两天为了解决Android上面退出程序问题折腾了半死,在google & baidu 上面找了很久、很久出来的完全千篇一律,说的方法有三,但是经过我试验后全部不行。

      三个方法分别是:

 

  1. killProcess, 这种方式当你kill后 Activity 会返回到上一个Activity
  2. Android Level 8(包含8)前使用一个API来操作,Level8以后又是另外一种,所以不能通用
  3. 使用 FLAG_ACTIVITY_CLEAR_TOP,从 A 到 B
下面介绍自己的方式:
大家都知道 Android 的 Activity 是存着历史栈的,比如从 A -> B -> C,C 完成 finish 后回到 B,把所有的Activity 都 finish了,程序就自然退出了。 当然在 finish 的同时也需要是否自己程序的其他资源。所以需要想个办法把 Activity 给存起来。然后在程序退出的地方调用它们的 finish()方法。
 
使用全局变量。对了,第一个想到的就是继承 Application,代码入下。
[java]  view plain  copy
 
  1. public class AgentApplication extends Application {  
  2.   
  3. private List<Activity> activities = new ArrayList<Activity>();  
  4.   
  5.     public void addActivity(Activity activity) {  
  6.         activities.add(activity);  
  7.     }  
  8.   
  9.     @Override  
  10.     public void onTerminate() {  
  11.         super.onTerminate();  
  12.           
  13.         for (Activity activity : activities) {  
  14.             activity.finish();  
  15.         }  
  16.           
  17.         onDestroy();  
  18.           
  19.         System.exit(0);  
  20.     }  
  21. }  

然后在 Activity  onCreate 的时候来调用  addActivity (),有人可能想到这个Application需要在所有的 Activity  onCreate的时候都使用,需要做一个单例实例。其实根本不需要。在 Activity 中使用  this.getApplication() 就可以了。
 
最后在你需要推出程序的地方调用 application.onTerminate() 就可以了。记住:super.onTerminate() 必须调用,代码中的 onDestroy()是我自己的释放其他资源的方法,不是系统的。
 
运行以上代码后,在LogCat 中会出现一行提示:
Process  包名 (pid  xxxxx)  has died.  证明你的程序退出了。现在你可以测试了。
 
希望对大家有用。同时感谢同事胡楠帮我处理其他问题,使得我才有时间来 写博客,谢谢。 

相关文章:

  • 初识 linux 正则表达式
  • swift - UILabel的用法
  • 抽象类是否可继承实体类的问题
  • CAS客户端票据分发问题
  • 实用 —— PowerCLI (二)
  • Java集合-----java集合框架常见问题
  • 本地通知和推送通知编程指南
  • web.xml文件的作用
  • 计算机网络笔记--绪论(一)
  • 三星GT-S7562i 刷机 完整版
  • .NET中使用Redis (二)
  • 3.整数表达式
  • Linux系统上安装mysql数据库
  • cenos6.4 samba配置
  • 关于Cocos2d-x中GameController的定义
  • php的引用
  • [数据结构]链表的实现在PHP中
  • CAP 一致性协议及应用解析
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • ESLint简单操作
  • js递归,无限分级树形折叠菜单
  • Mac转Windows的拯救指南
  • nginx 配置多 域名 + 多 https
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue ES6 Jade Scss Webpack Gulp
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 闭包--闭包之tab栏切换(四)
  • 翻译:Hystrix - How To Use
  • 后端_ThinkPHP5
  • 跨域
  • 老板让我十分钟上手nx-admin
  • 前端性能优化--懒加载和预加载
  • 收藏好这篇,别再只说“数据劫持”了
  • 通信类
  • zabbix3.2监控linux磁盘IO
  • 仓管云——企业云erp功能有哪些?
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # C++之functional库用法整理
  • #FPGA(基础知识)
  • #QT(串口助手-界面)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (42)STM32——LCD显示屏实验笔记
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • ***通过什么方式***网吧
  • .mysql secret在哪_MYSQL基本操作(上)
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET delegate 委托 、 Event 事件