原文网址:http://java--hhf.iteye.com/blog/1826880
每一个activity都有自己的生命周期,被打开了最终就要被关闭。
四种结束当前的activity方法
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上的数据依然保留
如果已经启动了四个Activity:A,B,C和D,
在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留
如果已经启动了四个Activity:A,B,C和D,在D Activity里,
/想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:
如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity
创建一个专门用来处理activity的类
在每个activity被创建时加上
将该activity添加到list中去。
当你想关闭时,调用SysApplication的exit方法