【转】android开发中如何结束所有的activity
原文网址:http://java--hhf.iteye.com/blog/1826880
每一个activity都有自己的生命周期,被打开了最终就要被关闭。
四种结束当前的activity方法
- //关闭当前activity方法一
- finish();
- //关闭当前界面方法二
- android.os.Process.killProcess(android.os.Process.myPid());
- //关闭当前界面方法三
- System.exit(0);
- //关闭当前界面方法四
- 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上的数据依然保留
- Intent intent = new Intent();
- intent.setClass(TableActivity.this, FrameActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//设置不要刷新将要跳到的界面
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
- startActivity(intent);
如果已经启动了四个Activity:A,B,C和D,
在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留
- Intent intent = new Intent();
- intent.setClass(TableActivity.this, FrameActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity
- startActivity(intent);
如果已经启动了四个Activity:A,B,C和D,在D Activity里,
/想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:
- Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);
- intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
- startActivity(intent1);
如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity
创建一个专门用来处理activity的类
- package com.layout;
- import java.util.LinkedList;
- import java.util.List;
- import android.app.Activity;
- import android.app.Application;
- /**
- * 一个类 用来结束所有后台activity
- * @author Administrator
- *
- */
- public class SysApplication extends Application {
- //运用list来保存们每一个activity是关键
- private List<Activity> mList = new LinkedList<Activity>();
- //为了实现每次使用该类时不创建新的对象而创建的静态对象
- private static SysApplication instance;
- //构造方法
- private SysApplication(){}
- //实例化一次
- public synchronized static SysApplication getInstance(){
- if (null == instance) {
- instance = new SysApplication();
- }
- return instance;
- }
- // add Activity
- public void addActivity(Activity activity) {
- mList.add(activity);
- }
- //关闭每一个list内的activity
- public void exit() {
- try {
- for (Activity activity:mList) {
- if (activity != null)
- activity.finish();
- }
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- System.exit(0);
- }
- }
- //杀进程
- public void onLowMemory() {
- super.onLowMemory();
- System.gc();
- }
- }
在每个activity被创建时加上
- SysApplication.getInstance().addActivity(this);
将该activity添加到list中去。
当你想关闭时,调用SysApplication的exit方法
- //关闭整个程序
- SysApplication.getInstance().exit();
【转】android开发中如何结束所有的activity的更多相关文章
- android开发中如何结束所有的activity
每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 //关闭当前activity方法一 finish(); //关闭当前界面方法二 android. ...
- 转_ _android开发中如何结束所有的activity
每一个activity都有自己的生命周期,被打开了最终就要被关闭. 四种结束当前的activity方法 Java代码: //关闭当前activity方法一 finish(); //关闭当前界面方法 ...
- Android 开发中三种多线程
在开发工程中线程可以帮助我们提高运行速度,Android开发中我知道的线程有四个一个是老生长谈的Thread,第二个是asyncTask,第三个:TimetTask,第四个是Looper,四个多线程各 ...
- Intent 对象在 Android 开发中的应用
转自(http://www.ibm.com/developerworks/cn/opensource/os-cn-android-intent/) Android 是一个开放性移动开发平台,运行在该平 ...
- Android开发中常用的设计模式
首先需要说明的是,这篇博文灵感来自于 http://www.cnblogs.com/qianxudetianxia/archive/2011/07/29/2121547.html ,在这里,博主已经很 ...
- Android学习探索之Java 8 在Android 开发中的应用
前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...
- android开发中fragment获取context
在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...
- java中的反射机制在Android开发中的用处
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...
- Android开发中的输入合法性检验
Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...
随机推荐
- Java编程陷阱-类成员初始化
原文地址:http://blog.csdn.net/veryitman/article/details/6450523 如果你忽略Java的细节,恐怕你的代码会充满bug,下面讨论关于类成员初始化问题 ...
- 【转载】Shared Configuration
Introduction The Internet changes the ways in which companies handle their day-to-day business and h ...
- 关于在MDK4.5以上版本不能使用JLINK V8的解决办法
如果安装MDK4.50版本以上不能使用jlink8的话,请安装jlink 4.36k版本(或以下)驱动,安装完成后,把\SEGGER\JLinkARM_V436k目录下的JLinkARM.dll拷贝到 ...
- css兼容性问题
其实做网页最大的问题还是兼容性吧,要调试IE的各种浏览器. DIV+CSS设计IE6.IE7.FF 兼容性 DIV+CSS网页布局这是一种趋势,我也开始顺应这股趋势了,不过在使用DIV+CSS网站设 ...
- ASP+MYSQL的配置及乱码解决
TempStr = "driver={MySQL ODBC 3.51 Driver};database="&strDB&";server="&a ...
- VMware复制Centos6虚拟机要改的地方
1.删除文件 /etc/udev/rules.d/70-persistent-net.rules (它会绑定你网卡信息) 2.重新配置 # vi /etc/sysconfig/network-scr ...
- 为什么选择Typescript
上一节,我简单介绍了Typescript,并将Typescript和JavaScript进行了对比,有些网友提出了一些疑问,可能有些网友对于这个Typescript还不是特别的熟悉,这节,我做一些演示 ...
- 解决js浮点数计算bug
1.加 function add(a, b) { var c, d, e; try { c = a.toString().split(".")[1].length; } catch ...
- [转载]hadoop SecondNamenode详解
SecondNamenode名字看起来很象是对第二个Namenode,要么与Namenode一样同时对外提供服务,要么相当于Namenode的HA.真正的了解了SecondNamenode以后,才发现 ...
- MVC 文本转换成html显示
最近在学习ASP.NET MVC,项目中需要将后台传输的HTML文本在前台页面显示:@Html.Raw(HttpUtility.HtmlDecode(ViewBag.DisplayText)).记下来 ...