原文网址:http://www.yoyong.com/archives/199

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类
代码如下:

  1. import java.util.LinkedList;
  2. import java.util.List;
  3. import android.app.Activity;
  4. import android.app.Application;
  5. public class ExitApplication extends Application {
  6. private List activityList = new LinkedList();
  7. private static ExitApplication instance;
  8. private ExitApplication()
  9. {
  10. }
  11. //单例模式中获取唯一的ExitApplication实例
  12. public static ExitApplication getInstance()
  13. {
  14. if(null == instance)
  15. {
  16. instance = new ExitApplication();
  17. }
  18. return instance;
  19. }
  20. //添加Activity到容器中
  21. public void addActivity(Activity activity)
  22. {
  23. activityList.add(activity);
  24. }
  25. //遍历所有Activity并finish
  26. public void exit()
  27. {
  28. for(Activity activity:activityList)
  29. {
  30. activity.finish();
  31. }
  32. System.exit(0);
  33. }
  34. }

下面的三个类IndexActivity, BActivity,CActivity是简单的例子,分别是IndexActivity–>BActivity–>CActivity的跳转顺序。在每个Activity类中onCreate()方法中调用ExitApplication.getInstance().addActivity(Activity activity)方法。在任何一个Activity界面退出应用程序时,只要调用ExitApplication.getInstance().exit()方法,就可以在任何一个Activity中完全退出应用程序。
IndexActivity 类源代码:

  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.Button;
  7. public class IndexActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. public void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.main);
  13. Button next=(Button)findViewById(R.id.next_to_b);
  14. next.setOnClickListener(nextClick);
  15. Button exit=(Button)findViewById(R.id.exit_main);
  16. exit.setOnClickListener(exitClick);
  17. ExitApplication.getInstance().addActivity(this);
  18. }
  19. OnClickListener nextClick=new OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. // TODO Auto-generated method stub
  23. Intent intent=new Intent(IndexActivity.this,BActivity.class);
  24. startActivity(intent);
  25. }
  26. };
  27. OnClickListener exitClick=new OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. // TODO Auto-generated method stub
  31. ExitApplication.getInstance().exit();
  32. }
  33. };
  34. }

BActivity 类源代码:

  1. import android.app.Activity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.view.View;
  5. import android.view.View.OnClickListener;
  6. import android.widget.Button;
  7. public class BActivity extends Activity {
  8. @Override
  9. protected void onCreate(Bundle savedInstanceState) {
  10. // TODO Auto-generated method stub
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.b);
  13. Button next_to_c=(Button)findViewById(R.id.next_to_c);
  14. next_to_c.setOnClickListener(next_to_cClick);
  15. Button exit_b=(Button)findViewById(R.id.exit_b);
  16. exit_b.setOnClickListener(exitClick);
  17. ExitApplication.getInstance().addActivity(this);
  18. }
  19. OnClickListener next_to_cClick=new OnClickListener() {
  20. @Override
  21. public void onClick(View v) {
  22. // TODO Auto-generated method stub
  23. Intent intent=new Intent(BActivity.this,CActivity.class);
  24. startActivity(intent);
  25. }
  26. };
  27. OnClickListener exitClick=new OnClickListener() {
  28. @Override
  29. public void onClick(View v) {
  30. // TODO Auto-generated method stub
  31. ExitApplication.getInstance().exit();
  32. }
  33. };
  34. }

CActivity 类源代码:

  1. import android.app.Activity;
  2. import android.os.Bundle;
  3. import android.view.View;
  4. import android.view.View.OnClickListener;
  5. import android.widget.Button;
  6. public class CActivity extends Activity{
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. // TODO Auto-generated method stub
  10. super.onCreate(savedInstanceState);
  11. setContentView(R.layout.c);
  12. Button exit_c=(Button)findViewById(R.id.exit_c);
  13. exit_c.setOnClickListener(exitClick);
  14. ExitApplication.getInstance().addActivity(this);
  15. }
  16. OnClickListener exitClick=new OnClickListener() {
  17. @Override
  18. public void onClick(View v) {
  19. // TODO Auto-generated method stub
  20. ExitApplication.getInstance().exit();
  21. //如果只是调用以下其中的一个方法,并不会完全退出应用
  22. //android.os.Process.killProcess(android.os.Process.myPid());
  23. //System.exit(0);
  24. }
  25. };
  26. }

源码下载ExitActivity.zip

【转】android 完全退出应用程序的更多相关文章

  1. android完全退出应用程序

    android 完全退出应用程序android android 退出应用程序, 单例模式管理Activity引自:http://www.yoyong.com/archives/199android 退 ...

  2. android 安全退出应用程序的几种方法

    android 安全退出应用程序的几种方法 正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.a ...

  3. android 完全退出应用程序(重要)

    android退出应用程序会调用android.os.Process.killProcess(android.os.Process.myPid())或是System.exit(0),这只是针对第一个A ...

  4. Android完全退出应用程序,完美解决方案

    最近公司工作不是很忙,就抽空研究了下Android的引导页,但是在写完引导页并且进入到住页面之后,在退出时,采用"再按一次退出"的方式去实现的,用的方式是杀掉进程跟exit,即:a ...

  5. android 完全退出应用程序(经过严格验证)

    今天解决了如何彻底结束Android应用程序的方法.网上有很多的参考方法,什么finish():android.os.Process.killProcess(android.os.Process.my ...

  6. Android 完全退出应用程序

    随着业务逻辑越来越复杂,退出应用程序也不像之前那个直接将Activity finish()掉就可以了,在网上看到很多完全退出App的文章,但是实践之后发现,并不像文章中描述的那样,不是方法过时了,就是 ...

  7. 我的Android进阶之旅------>Android安全退出应用程序的几种方式

    当应用不再使用时,通常需要关闭应用,可以使用以下几种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程.  建议使用这种方式 android.os.Process.kil ...

  8. Android 安全退出应用程序的方法总结

    正常关闭应用程序: 当应用不再使用时,通常需要关闭应用,可以使用以下三种方法关闭android应用: 第一种方法:首先获取当前进程的id,然后杀死该进程. android.os.Process.kil ...

  9. android 完美退出应用程序。

    Android 程序在点击回退键时,如果只有一个activity,调用finish()方法就能退出界面,如果有多个界面,在调用该方法时,只会销毁当前的activity,显示栈顶的其它activity, ...

随机推荐

  1. Frequent Pattern 挖掘之二(FP Growth算法)(转)

    FP树构造 FP Growth算法利用了巧妙的数据结构,大大降低了Aproir挖掘算法的代价,他不需要不断得生成候选项目队列和不断得扫描整个数据库进行比对.为了达到这样的效果,它采用了一种简洁的数据结 ...

  2. WisDom.Net 框架设计(八) 持久层

    WisDom.Net ---持久层  1.什么是持久层        持久层负责最基础的功能支撑,为项目提供一个高层,统一,和并发的数据持久机制,提供了比如建立数据库连接,关闭数据库连接,执行sql语 ...

  3. 网页Gzip

    网页Gzip压缩检测工具 网站Gzip压缩可以减小服务器带宽占用,提高用户打开网页速度,最多可以提升网站80%的性能,是每个网站必须开启的功能, 站长工具网页 Gzip压缩检测工具方便站长朋友们检测特 ...

  4. Javascript基础学习(3)_对象和数组

    一.对象是一种无序的属性集合,每个属性都有自己的名字和值. 1.创建对象 花括号内逗号分隔 var person = { "Name" : "LiCheng", ...

  5. yieId浅谈

    例子:在不使用yieId时,通常我们都会采取先遍历再把元素加到新的List中 using (var reader = SqlHelper.ExecuteReader("")) { ...

  6. LINUX nohup命令输入输出深浅进出

    无论是否将 nohup命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中.如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中 ...

  7. CSS Outlines

    轮廓(outline)是绘制于元素周围的一条线,位于边框边缘的外围,可起到突出元素的作用. 轮廓(outline)属性指定了样式,颜色和外边框的宽度. 轮廓(outline)实例 在元素周围画线本例演 ...

  8. .NET开源工程推荐(Accord,AForge,Emgu CV)

         本人用C#开发了一些项目,下面的开源工程给了我很大的帮助——详细的源代码介绍加丰富的实例运用,是非常不错的学习资源,分享给大家,同时附上我的相关开发项目.    Accord.NET The ...

  9. PDF在xp或2003下正常在win7下乱码的问题

    1.先确定当前PDF文件需要字体(在PDF工具打开找到Font字体可以查看具体需要哪些字体). 2.网上下载或者在生成PDF的电脑上把老版本字体拷贝出来然后在win7下安装,当提示已经存在该字体时,直 ...

  10. 关于php的一些开源程序

    最好用的当属thinksns,目前更新到4.3.4, 社交型网站. 此网站提供大量源码,有时间可以去看看:http://down.admin5.com/