android 完全退出应用程序(重要)
android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个Activity(也就是入口的Activity)时生效。如果有A,B,C三个Activity,而想在B或C中Activity退出,调用上面的方法,往往会销毁当前的Activity返回上一个Activity。当然也可以逐个返回上一个Activity,直到跳转到入口的Activity,最后退出应用程序。但这样比较麻烦,而且逐个返回的体验并不友好。
网上比较流行的方法是定义栈,写一个ExitApplication类,利用单例模式管理Activity,在每个在Activity的onCreate()方法中调用ExitApplication.getInstance().addActivity(this)方法,在退出时调用ExitApplication.getInstance().exit()方法,就可以完全退出应用程序了。
ExitApplication类
代码如下:
- import java.util.LinkedList;
 - import java.util.List;
 - import android.app.Activity;
 - import android.app.Application;
 - public class ExitApplication extends Application {
 - private List activityList = new LinkedList();
 - private static ExitApplication instance;
 - private ExitApplication()
 - {
 - }
 - //单例模式中获取唯一的ExitApplication实例
 - public static ExitApplication getInstance()
 - {
 - if(null == instance)
 - {
 - instance = new ExitApplication();
 - }
 - return instance;
 - }
 - //添加Activity到容器中
 - public void addActivity(Activity activity)
 - {
 - activityList.add(activity);
 - }
 - //遍历所有Activity并finish
 - public void exit()
 - {
 - for(Activity activity:activityList)
 - {
 - activity.finish();
 - }
 - System.exit(0);
 - }
 - }
 
下面的三个类IndexActivity, BActivity,CActivity是简单的例子,分别是IndexActivity–>BActivity–>CActivity的跳转顺序。在每个Activity类中onCreate()方法中调用ExitApplication.getInstance().addActivity(Activity activity)方法。在任何一个Activity界面退出应用程序时,只要调用ExitApplication.getInstance().exit()方法,就可以在任何一个Activity中完全退出应用程序。
IndexActivity 类源代码:
- import android.app.Activity;
 - import android.content.Intent;
 - import android.os.Bundle;
 - import android.view.View;
 - import android.view.View.OnClickListener;
 - import android.widget.Button;
 - public class IndexActivity extends Activity {
 - /** Called when the activity is first created. */
 - @Override
 - public void onCreate(Bundle savedInstanceState) {
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.main);
 - Button next=(Button)findViewById(R.id.next_to_b);
 - next.setOnClickListener(nextClick);
 - Button exit=(Button)findViewById(R.id.exit_main);
 - exit.setOnClickListener(exitClick);
 - ExitApplication.getInstance().addActivity(this);
 - }
 - OnClickListener nextClick=new OnClickListener() {
 - @Override
 - public void onClick(View v) {
 - // TODO Auto-generated method stub
 - Intent intent=new Intent(IndexActivity.this,BActivity.class);
 - startActivity(intent);
 - }
 - };
 - OnClickListener exitClick=new OnClickListener() {
 - @Override
 - public void onClick(View v) {
 - // TODO Auto-generated method stub
 - ExitApplication.getInstance().exit();
 - }
 - };
 - }
 
BActivity 类源代码:
- import android.app.Activity;
 - import android.content.Intent;
 - import android.os.Bundle;
 - import android.view.View;
 - import android.view.View.OnClickListener;
 - import android.widget.Button;
 - public class BActivity extends Activity {
 - @Override
 - protected void onCreate(Bundle savedInstanceState) {
 - // TODO Auto-generated method stub
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.b);
 - Button next_to_c=(Button)findViewById(R.id.next_to_c);
 - next_to_c.setOnClickListener(next_to_cClick);
 - Button exit_b=(Button)findViewById(R.id.exit_b);
 - exit_b.setOnClickListener(exitClick);
 - ExitApplication.getInstance().addActivity(this);
 - }
 - OnClickListener next_to_cClick=new OnClickListener() {
 - @Override
 - public void onClick(View v) {
 - // TODO Auto-generated method stub
 - Intent intent=new Intent(BActivity.this,CActivity.class);
 - startActivity(intent);
 - }
 - };
 - OnClickListener exitClick=new OnClickListener() {
 - @Override
 - public void onClick(View v) {
 - // TODO Auto-generated method stub
 - ExitApplication.getInstance().exit();
 - }
 - };
 - }
 
CActivity 类源代码:
- import android.app.Activity;
 - import android.os.Bundle;
 - import android.view.View;
 - import android.view.View.OnClickListener;
 - import android.widget.Button;
 - public class CActivity extends Activity{
 - @Override
 - protected void onCreate(Bundle savedInstanceState) {
 - // TODO Auto-generated method stub
 - super.onCreate(savedInstanceState);
 - setContentView(R.layout.c);
 - Button exit_c=(Button)findViewById(R.id.exit_c);
 - exit_c.setOnClickListener(exitClick);
 - ExitApplication.getInstance().addActivity(this);
 - }
 - OnClickListener exitClick=new OnClickListener() {
 - @Override
 - public void onClick(View v) {
 - // TODO Auto-generated method stub
 - ExitApplication.getInstance().exit();
 - //如果只是调用以下其中的一个方法,并不会完全退出应用
 - //android.os.Process.killProcess(android.os.Process.myPid());
 - //System.exit(0);
 - }
 - };
 - }
 
http://www.yoyong.com/archives/199
android 完全退出应用程序(重要)的更多相关文章
- android完全退出应用程序
		
android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...
 - android 安全退出应用程序的几种方法
		
android 安全退出应用程序的几种方法 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.a ...
 - Android完全退出应用程序,完美解决方案
		
最近公司工作不是很忙,就抽空研究了下Android的引导页,但是在写完引导页并且进入到住页面之后,在退出时,采用"再按一次退出"的方式去实现的,用的方式是杀掉进程跟exit,即: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 完全退出应用程序
		
随着业务逻辑越来越复杂,退出应用程序也不像之前那个直接将Activity finish()掉就可以了,在网上看到很多完全退出App的文章,但是实践之后发现,并不像文章中描述的那样,不是方法过时了,就是 ...
 - 我的Android进阶之旅------>Android安全退出应用程序的几种方式
		
当应用不再使用时,通常需要关闭应用,可以使用以下几种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. 建议使用这种方式 android.os.Process.kil ...
 - Android 安全退出应用程序的方法总结
		
正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. android.os.Process.kil ...
 - android 完美退出应用程序。
		
Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...
 
随机推荐
- 使用免费内测托管平台fir.im测试
			
1,使用Xcode先行把项目导成ipa文件.登录http://fir.im/ 2.点击左上角的苹果标志,把准备好的ipa文件拖入即可.4.填写相关材料即可开始上传5,让飞机灰一会即可.6.接着会看见: ...
 - HDU 5092
			
http://acm.hdu.edu.cn/showproblem.php?pid=5092 卡读题,实质是每行取一个点,从上到下找一条路径权值和最小,点可以到达的地方是周围八个格子 类似数塔的dp, ...
 - Inno Setup 安装前卸载原程序
			
Inno Setup 安装前卸载原程序 分类: Install Setup 2013-02-02 15:53 2315人阅读 评论(0) 收藏 举报 很多時候我們需要在安裝文件之前卸載原有的程序而不是 ...
 - 深入分析Php处理浮点数的问题
			
下文来为各位介绍Php处理浮点数的问题了,如果各位在使用过程中碰到这些问题我们可以一起来看看,希望文章对各位有帮助 公司要对产品价格做调整,因为做的外贸商城,所以价格要和国际接轨.比如国外的价格展示方 ...
 - VC++编程中常用的字符串转换函数
			
VC++编程中经常遇到不同编码编码的字符串之间需要转换的情况,以下简单提供几个不同编码字符串之间的转换函数: ANSI 字符串和Unicode字符串之间的转换 //Convert wide char ...
 - CUDA 标准编程模式
			
前言 本文将介绍 CUDA 编程的基本模式,所有 CUDA 程序都基于此模式编写,即使是调用库,库的底层也是这个模式实现的. 模式描述 1. 定义需要在 device 端执行的核函数.( 函数声明前加 ...
 - ZMMR106-批量更新PO交货日期
			
************************************************************************ Title : ZMMR106 ** Applicat ...
 - JAVA 23种设计模式(转)
			
1.FACTORY?追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了.麦当劳和肯德基就是生产鸡翅 ...
 - ndk-build出错,错误以及解决办法如下
			
用NDK编译jni目录下的文件了,我的系统是Ubuntu10.04,NDK版本是android-ndk-r7b. 切换到工程的jni目录下执行:ndk-build(ndk-build的路径已经添加到系 ...
 - Java——IO(输入输出流)
			
 * * 想要知道开发时用到哪些数据对象,只要通过四个明确即可: * 1.明确源,和目的: * 源: InputStream reader * 目的: OutPutStream Write ...