注:本文大部分为网上转载,本人只是根据工作的需要略做整合!

android 完全退出应用程序

注意:1、单例模式的学习
   2、Manifest.xml,注意项目清单文件中要加上

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. publicclass ExitApplication extends Application {
  6. private List activityList = new LinkedList();
  7. privatestatic ExitApplication instance;
  8. private ExitApplication()
  9. {
  10. }
  11. //单例模式中获取唯一的ExitApplication实例
  12. publicstatic ExitApplication getInstance()
  13. {
  14. if(null == instance)
  15. {
  16. instance = new ExitApplication();
  17. }
  18. return instance;
  19. }
  20. //添加Activity到容器中
  21. publicvoid addActivity(Activity activity)
  22. {
  23. activityList.add(activity);
  24. }
  25. //遍历所有Activity并finish
  26. publicvoid 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. publicclass IndexActivity extends Activity {
  8. /** Called when the activity is first created. */
  9. @Override
  10. publicvoid 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. publicvoid 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. publicvoid onClick(View v) {
  30. // TODO Auto-generated method stub
  31. ExitApplication.getInstance().exit();
  32. }
  33. };
  34. }
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 类源代码:

  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. publicclass BActivity extends Activity {
  8. @Override
  9. protectedvoid 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. publicvoid 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. publicvoid onClick(View v) {
  30. // TODO Auto-generated method stub
  31. ExitApplication.getInstance().exit();
  32. }
  33. };
  34. }
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 类源代码:

  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. publicclass CActivity extends Activity{
  7. @Override
  8. protectedvoid 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. publicvoid 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. }
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);
}
}; }

源码下载ExitActivity.zip

转载地址:http://www.yoyong.com/archives/199

Android工作学习第5天之Activity的完全退出程序的更多相关文章

  1. Android工作学习第5天之Activity的传值问题

    注:本文大部分为网上转载,本人只是根据工作的需要略做整合! 本章将借用一个实例,讲解如何注册并激活一个新的Activity,以及多个Activity之间如何传值. 下面是主Activity的代码: [ ...

  2. Android工作学习第5天之TabHost实现菜单栏底部显示

    TabHost是一个装载选项卡窗口的容器,实现分模块显示的效果.像新浪微博客户端.微信客户端都是使用tabehost组件来开发的. TabHost的组成: |---TabWidget:实现标签栏,可供 ...

  3. Android开发学习之路-Service和Activity的通信

    在很多时候,Service都不仅仅需要在后台运行,还需要和Activity进行通信,或者接受Activity的指挥,如何来实现,来看代码. 定义一个服务 // 创建一个服务,然后在onBind()中返 ...

  4. 【Android开发学习笔记】【第五课】Activity的生命周期-上

    今天学习Activity当中的七个生命周期函数: 首先得说一个事情,就是在代码当中如果加入了 System.out.println(" ------");之后,如何查看这里面的输出 ...

  5. 【Android开发学习笔记】【第三课】Activity和Intent

    首先来看一个Activity当中启动另一个Activity,直接上代码说吧: (1)首先要多个Activity,那么首先在res-layout下新建一个 Other.xml,用来充当第二个Activi ...

  6. Android开发学习之路--Activity之初体验

    环境也搭建好了,android系统也基本了解了,那么接下来就可以开始学习android开发了,相信这么学下去肯定可以把android开发学习好的,再加上时而再温故下linux下的知识,看看androi ...

  7. Android学习笔记(一)——Activity简介 和 View

    源文链接:http://www.cnblogs.com/shyang--TechBlogs/archive/2011/03/14/1984195.html Android SDK ( Software ...

  8. Android学习总结(四)—— Activity和 Service进行通信

    一.Activity 和 Service进行通信的基本概念 前面我们学习我生命周期里面包含了启动和停止服务的方法,虽然服务器在活动里启动,但在启动了服务之后,活动与服务基本就没有什么关系了.我们在活动 ...

  9. Android开发学习—— activity

    activity生命周期 #Activity生命周期###void onCreate()* Activity已经被创建完毕###void onStart()* Activity已经显示在屏幕,但没有得 ...

随机推荐

  1. C#的选择语句练习2

    1.输入a,b,c三个数,计算一元二次方程ax²+bx+c的根:若a=0,则不是一元二次方程:△=b²-4ac,根的计算公式为-b±√b²-4ac/2a:若△=b²-4ac>0,则方程有两个不一 ...

  2. Spark 累加器

    由于spark是分布式的计算,所以使得每个task间不存在共享的变量,而为了实现共享变量spark实现了两种类型 - 累加器与广播变量, 对于其概念与理解可以参考:共享变量(广播变量和累加器).可能需 ...

  3. oracle删除用户及表空间,导入用户和数据

    drop user xxx cascade; drop tablespace xxx including contents and datafiles; create tablespace xxx d ...

  4. 原生select默认显示为空胡fish覅神农大丰今年圣诞节奋笔疾书发撒可交付你说的尽快发那段时间南方大厦尽可能放你的所发生的你富家大室耐腐蚀的看法呢尽快发你上课积啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊撒啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊分你束带结发你看

    下拉框默认为空: <select> <option value="" class="blank"></option> < ...

  5. Quartus II 与 Modelsim 联调【转】

    Quartus II 9.0版本的时候软件还有自带的仿真工具,现在安装的是11.0以上版本,才发现 Quartus II 11.0以上取消了软件自带的波形仿真工具,因此需要波形仿真就要调用专业的仿真工 ...

  6. Windows下利用虚拟机运行FSL 安装和配置

    FSL是牛津大学FMRIB开发的用于分析功能磁共振影像的科研软件包. 运行要求:windows7或vista操作系统,10G硬盘空间,4G内存. 从FSL官网上下载Centos6的虚拟盘(FSLVm6 ...

  7. 微信上传文章素材—ASP.NET MVC从View层传数据到Controller层

    View层: $('#btnNews').click(function() { if (!confirm('确定要提交吗?')) { return; } var frontViewData = []; ...

  8. 【python】构造字典类型字典

    字典类型字典:就是包含字典类型的字典,如{'sss': {'ss': 'dddsdsdsd'}} 构造方式: a={} b="sss" a[b]={} a[b]['ss'] = & ...

  9. mac版微信web开发者工具(小程序开发工具)无法显示二维码 解决方案

    微信小程序概念的提出,绝对可以算得上中国IT界惊天动地的一件大事,这可能意味着一场新的开发热潮即将到来, 我也怀着激动的心情准备全身心投入其中,不过截止目前,在官方网站上下载的最新版本都无法使用,打开 ...

  10. go 语言中常用的包

    来自学习go语言.pdf 译者刑星 ==== fmt 包fmt实现了格式化IO函数,这与c的printf和scanf类似,格式化短语派生于c %v 默认格式的值.当打印结构时,加号(%+v)会增加字段 ...