Android完全退出应用程序,完美解决方案
最近公司工作不是很忙,就抽空研究了下Android的引导页,但是在写完引导页并且进入到住页面之后,在退出时,采用"再按一次退出"的方式去实现的,用的方式是杀掉进程跟exit,即:android.os.Process.killProcess(android.os.Process.myPid())或者System.exit(0);
但是问题出现了,因为我在进入引导页Activity跟主界面Activity之前我是还有一个欢迎页Activity的(注:这个入口Activity的作用是判断此应用程序是否是首次加载,如果是首次加载就跳转到引导页中,否则,直接跳转到主界面Activity中),当我用以上两种方式的任意一种时,它并没有完全退出应用程序,而只是纯粹的销毁当前的Activity并且返回上一个Activity中,也就是入口欢迎页Activity,但这不是我想要的结果,所以就查了查关于完全退出应用程序的解决方案,最后找到了这个方案,完美解决该问题,希望可以借鉴给正在学习的Android菜鸟儿们。。。
Android退出应用程序回调用android.os.Process.killProcess(android.os.Process.myPid())或者System.exit(0),这只是针对第一个Activity时有效(即入口欢迎页Activity),如果我的应用程序中需要用到多个Activity,并且要求每个Activity都可以直接退出该应用程序时,这个方案也就无法去实现了。
网上查了下,现下最流行的方式是定义一个栈,写一个自定义的MyApplication类,利用单例模式去单独对Activity进行管理,在每个Activity的onCreate()方法中调用MyApplication.getInstance().addActivity(this)将当前的Activity添加到栈中统一管理,如果需要退出应用程序时再调用MyApplication.getInstance().exit()方法直接就完全退出了应用程序。
实现方案:统一管理的好处就是如果需要退出时,直接将add进栈的Activity进行同意finish就行。exit方法的实现原理就是将栈中所有的Activity实例循环然后finish的。
具体调用方式如上所述,以下只是MyApplication的具体实现,至于如何调用此处不便赘述。
代码如下:
public class MyApplication extends Application {
private List<Activity> activityList = new LinkedList<Activity>(); private static ExitApplication instance; private ExitApplication() { } // 单例模式中获取唯一的ExitApplication实例 public static ExitApplication getInstance() { if(instance == null) { instance = new ExitApplication(); } return instance; } // 添加Activity到容器中 public void AddActivity(Activity activity) { this.activityList.add(activity); } public void exit() { for(Activity activity:this.activityList) { activity.finish(); } System.exit(0); } }
Android完全退出应用程序,完美解决方案的更多相关文章
- android完全退出应用程序
android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...
- android 安全退出应用程序的几种方法
android 安全退出应用程序的几种方法 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.a ...
- Android 完全退出应用程序
随着业务逻辑越来越复杂,退出应用程序也不像之前那个直接将Activity finish()掉就可以了,在网上看到很多完全退出App的文章,但是实践之后发现,并不像文章中描述的那样,不是方法过时了,就是 ...
- android 完全退出应用程序(重要)
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...
- 【转】android 完全退出应用程序
原文网址:http://www.yoyong.com/archives/199 android退出应用程序会调用android.os.Process.killProcess(android.os.Pr ...
- android 完全退出应用程序(经过严格验证)
今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...
- 我的Android进阶之旅------>Android安全退出应用程序的几种方式
当应用不再使用时,通常需要关闭应用,可以使用以下几种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. 建议使用这种方式 android.os.Process.kil ...
- Android 安全退出应用程序的方法总结
正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. android.os.Process.kil ...
- 【转】 android获取设备唯一标识完美解决方案
<p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; color: rgb(51, 51, 51); ...
随机推荐
- 原生js在IE7下 向dom添加节点的一个bug, (本例为添加hidden input)
需求是要用js向dom结构增加1个hidden用来存放要post到服务器的数据 var aspnetForm = document.getElementById("aspnetForm&qu ...
- 用twisted 做一个日志收集系统
混沌初开 起初我是不会上logging模块的,直接导致了即时有了日志,我也存到了数据库中,而且量也不大,是否能遇到异常只能靠运气了 开天辟地 不得不说,没有任何输出的线上环境真的挺难调试的,当然,聪明 ...
- IOS中将十进制色值转换成UIColor
最近因项目需要,在网上找了一些代码,整合了一下,实现的效果就是将10进制的RGB色值转换IOS用的UIColor,方法还有缺陷,有待改进 UIColor *getColorFromString(NSS ...
- MapReduce多表连接
多表关联 多表关联和单表关联类似,它也是通过对原始数据进行一定的处理,从其中挖掘出关心的信息.下面进入这个实例. 1 实例描述 输入是两个文件,一个代表工厂表,包含工厂名列和地址编号列:另一个代表地址 ...
- OFBiz之SVN下载地址
trunk: $ svn co http://svn.apache.org/repos/asf/ofbiz/trunk ofbiz release13.07: $ svn co http://svn. ...
- 黄聪:如何使用CodeSmith批量生成代码(转:http://www.cnblogs.com/huangcong/archive/2010/06/14/1758201.html)
先看看CodeSmith的工作原理: 简单的说:CodeSmith首先会去数据库获取数据库的结构,如各个表的名称,表的字段,表间的关系等等,之后再根据用户自定义好的模板文件,用数据库结构中的关键字替代 ...
- PYTHON的CGIServer的进化
按例程,一步一步理解如何从SOCKET,TCP,HTTP,CGIHTTP进化的. 最终,静态文件和脚本分享,且能处理FORM提交和展示. 下一步,到数据库??:) A,SOCKET #HTTPserv ...
- CF192div2-330B - Road Construction
题意:给定n个城市并建造马路是的两两到达,且距离不能超过2 因为0<=m<n/2,所以必然存在某个城市是无限制的,那就可以以这个无限制的城市为中心建造.... 只要想通了真尼玛简单.... ...
- PHP dirname() 函数
定义和用法 dirname() 函数返回路径中的目录部分. 语法 dirname(path) 参数 描述 path 必需.规定要检查的路径. 说明 path 参数是一个包含有指向一个文件的全路径的字符 ...
- 服务器部署_linuix下 一台nginx 多域名之二
第二个需求: 1. 一台服务器部署了三个应用web1~web3对应三个域名:www.web1.com.www.web2.com.www.web3.com ,方法参照我另外一篇文章 2. 如果用非www ...