原文网址:http://java--hhf.iteye.com/blog/1826880

每一个activity都有自己的生命周期,被打开了最终就要被关闭。

四种结束当前的activity方法

  1. //关闭当前activity方法一
  2. finish();
  3. //关闭当前界面方法二
  4. android.os.Process.killProcess(android.os.Process.myPid());
  5. //关闭当前界面方法三
  6. System.exit(0);
  7. //关闭当前界面方法四
  8. this.onDestroy();

finish():结束当前 Activity,不会立即释放内存。遵循 android 内存管理机制。
exit():结束当前组件如 Activity,并立即释放当前 Activity 所占资源。
killProcess():结束当前组件如 Activity,并立即释放当前Activity  所占资源。
restartPackage():结束整个 App,包括 service 等其它 Activity 组件。

KillProcess:

在android中我们如果想要程序的进程结束可以这样写:

android.os.Process.killProcess(android.os.Process.myPid());

这样就可以从操作系统中结束掉当前程序的进程。

注意:android中所有的activity都在主进程中,在Androidmanifest.xml中可以设置成启动不同进程,Service不是一个单独的进程也不是一个线程。
当你Kill掉当前程序的进程时也就是说整个程序的所有线程都会结束,Service也会停止,整个程序完全退出。

System.exit:

当我们在写java程序时肯定用到过System.exit(0),它的意思是退出JVM(java虚拟机),在android中一样可以用,我们可以想像一下虚拟机都退出了当然执行System.exit的程序会完全退出,内存被释放。

注意:在android手机中查看当前正在运行的进程时可以发现还可以查看"后台缓存的进程",你会发现很多退出了的程序还在后台缓存的进程中,如果不要让程序在后台缓存那么就可以用System.exit(0);来退出程序了,可以清除后台缓存的本进程。

System.exit(0),System.exit(1)的区别:

参数0和1代表退出的状态,0表示正常退出,1表示异常退出(只要是非0的都为异常退出),即使不传0来执行也可以退出,该参数只是通知操作系统该程序是否是正常退出。

restartPackage
  ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);   
am.restartPackage(getPackageName()); 
系统会将,该包下的 ,所有进程,服务,全部杀掉,就可以杀干净了,要注意加上 
<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"></uses-permission>

在网络上找了一大堆的文章,每篇都是用System.exit(0)或者android.os.Process.killProcess(android.os.Process.myPid())这两种方法,但是我试过了,System.exit(0)这个根本不行,而android.os.Process.killProcess(android.os.Process.myPid())这个只能关闭当前的Activity,也就是对于一个只有单个Activity 的应用程序有效,如果对于有多外Activity的应用程序它就无能为力了。

注:在android4.0中restartPackage已经过时,用killBackgroundProcesses方法代替

但如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据依然保留

  1. Intent intent = new Intent();
  2. intent.setClass(TableActivity.this, FrameActivity.class);
  3. intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//设置不要刷新将要跳到的界面
  4. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
  5. startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留

  1. Intent intent = new Intent();
  2. intent.setClass(TableActivity.this, FrameActivity.class);
  3. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
  4. startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,
   /想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:

  1. Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);
  2. intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
  3. startActivity(intent1);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity

创建一个专门用来处理activity的类

  1. package com.layout;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import android.app.Activity;
  5. import android.app.Application;
  6. /**
  7. * 一个类 用来结束所有后台activity
  8. * @author Administrator
  9. *
  10. */
  11. public class SysApplication extends Application {
  12. //运用list来保存们每一个activity是关键
  13. private List<Activity> mList = new LinkedList<Activity>();
  14. //为了实现每次使用该类时不创建新的对象而创建的静态对象
  15. private static SysApplication instance;
  16. //构造方法
  17. private SysApplication(){}
  18. //实例化一次
  19. public synchronized static SysApplication getInstance(){
  20. if (null == instance) {
  21. instance = new SysApplication();
  22. }
  23. return instance;
  24. }
  25. // add Activity
  26. public void addActivity(Activity activity) {
  27. mList.add(activity);
  28. }
  29. //关闭每一个list内的activity
  30. public void exit() {
  31. try {
  32. for (Activity activity:mList) {
  33. if (activity != null)
  34. activity.finish();
  35. }
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. } finally {
  39. System.exit(0);
  40. }
  41. }
  42. //杀进程
  43. public void onLowMemory() {
  44. super.onLowMemory();
  45. System.gc();
  46. }
  47. }

在每个activity被创建时加上

  1. SysApplication.getInstance().addActivity(this);

将该activity添加到list中去。

当你想关闭时,调用SysApplication的exit方法

    1. //关闭整个程序
    2. SysApplication.getInstance().exit();

【转】android开发中如何结束所有的activity的更多相关文章

  1. android开发中如何结束所有的activity

    每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...

  2. 转_ _android开发中如何结束所有的activity

    每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 Java代码:   //关闭当前activity方法一 finish(); //关闭当前界面方法 ...

  3. Android 开发中三种多线程

    在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper,四个多线程各 ...

  4. Intent 对象在 Android 开发中的应用

    转自(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/) Android 是一个开放性移动开发平台,运行在该平 ...

  5. Android开发中常用的设计模式

    首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...

  6. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  7. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  8. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  9. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

随机推荐

  1. Javascript绝句欣赏

    1. 取整同时转成数值型: '10.567890'|0 结果: 10 '10.567890'^0 结果: 10 -2.23456789|0 结果: -2 ~~-2.23456789 结果: -2 2. ...

  2. php 两个数组是否相同,并且输出全面的数据,相同的加一个字段标示

    方法一: $date是数组,数组中有字段id,name; $data1是数组,数组中有字段sort_id,name; 所以要通过$date[$i]['id']==$data1[$j]['sort_id ...

  3. 关于“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问 ”

    原因:在从远程服务器复制数据到本地时出现“SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatas ...

  4. 部分A+B_1

    正整数A的“DA(为1位整数)部分”定义为由A中所有DA组成的新整数PA.例如:给定A = 3862767,DA = 6,则A的“6部分”PA是66,因为A中有2个6. 现给定A.DA.B.DB,请编 ...

  5. 工欲善其事必先利其器之Xcode高效插件和舒适配色

    功能强大的Xcode再配上高效的插件,必会让你的开发事半功倍.直接进入正题. Xcode插件安装方式: 1.github下载插件然后用xcode打开运行一遍,然后重启xcode. 2.安装插件管理Al ...

  6. Core Animation系列之CADisplayLink(转)

    转自 http://www.tuicool.com/articles/meMVR3 一直以来都想好好学习下CoreAnimation,奈何涉及的东西太多,想要一次性全部搞定时间上不允许,以后会断断续续 ...

  7. css样式积累

    1.圆角:     border-radius:16px 16px 16px 16px;     2透明度:             filter: alpha(opacity=80);       ...

  8. 算法的优化(C语言描述)

    算法的优化 算法的优化分为全局优化和局部优化两个层次.全局优化也称为结构优化,主要是从基本控制结构优化.算法.数据结构的选择上考虑:局部优化即为代码优化,包括使用尽量小的数据类型.优化表达式.优化赋值 ...

  9. C#,新建的系统服务项目有些机器不能运行

    检查了一下,是权限的问题 右键ProjectInstaller.cs 在设计界面里找到serviceProcessInstaller1右键属性 找到Account属性改为:LocalSystem

  10. 去除后台ckeditor的style="...."的样式

    .cnt_text .text img {/*width :auto !important;*/height :auto !important; max-width:660px;} 高度自适应,高度让 ...