在写多个activity的时候,有时候会对其中的一些activity进行退出和返回的操作。
程序中提供的activity.finish()这一方法仅仅只是将activity退出了堆栈,并没有实现应用程序的退出。而能够完全 的退出应用程序的方法有3种:
第一种是
android.os.Process.killProcess(android.os.Process.myPid());
这种方式虽然退出了应用程序,但是并不是完全的退出,它并没有将当前任务的任务栈进行清空,所以并不能完全的杀死应用程序的进程。
第二种是
在activity的生命周期函数中添加如下的函数,强制关闭与该包有关联的一切执行:
ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);
am.restartPackage("packagename");
还需要在AndroidManifest.xml文件中加入如下的权限: <uses-permission
android:name="android.permission.RESTART_PACKAGES" /> 然而这种方式虽然可以杀死应用程序,但是却有个弊端,无法杀死自己的,只能杀死别人的。
第三种是在直接终止正在运行的java虚拟机,从而导致程序的终止,即: System.exit(0);
这种方法也是不会将自己的应用程序杀死的。 在面对单个activity的时候这三个方法是可以使用并且有效的,但是当存在多个activity的时候,采用这些方法却可能并不能实现程序的退出,而是会停在某个activity上面,最后并没有结束程序和退出应用。面对这种情况,一般做的最多的处理就是通过单例模式的Application来存储新开启的activity最后通过它将所有的activity进行释放。
下面是单例的代码:
package com.example.util;
import java.util.LinkedList;
import java.util.List;
import android.app.Activity;
import android.app.Application;
public class ExitApplication extends Application {
private List<Activity> activityList=new LinkedList<Activity>();
private static ExitApplication instance;
private ExitApplication(){
}
public static ExitApplication getInstance(){
if(null==instance){
instance=new ExitApplication();
}
return instance;
}
public void addActivity(Activity activity){
activityList.add(activity);
}
public void exit(){
for(Activity activity:activityList){
activity.finish();
}
System.exit(0);
}
}在完成单例的工具类之后,在每一个activity的oncreate()方法中调用:
ExitApplication.getInstance().addActivity(this);
在执行关闭的方法中调用:
ExitApplication.getInstance().exit();
这样就可以实现多个activity的关闭的管理和退出的功能。
当然对于多个activity的关闭也是还有其他的方法的,例如对于每个activity进行标记,然后在通过广播对标记的activity进行关闭这样也是可以实现多个activity的关闭的。所以能够实现的方法是比较的多的,只是单例模式的这个方法确实比较容易理解,操作也比较方法,所以个人比较推荐。
最后,由于本人刚刚开始接触android的开发,有错的地方希望大家多多谅解并且指出,大家相互交流,谢谢!